При получении NsdManager всегда происходит утечка активности

При профилировании моего приложения я обнаружил, что получение NsdManager с помощью

nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);  // LEAKS!

утекает Activity, а

nsdManager = (NsdManager) getApplicationContext().getSystemService(Context.NSD_SERVICE);

не. Я сделал небольшое тестовое приложение, которое ничего не делает с NsdManager, кроме извлечения его с помощью контекста Activity, но оно все еще пропускает активность. Это ошибка? Мне действительно нужно постоянно использовать контекст приложения?

Устройство: эмулятор (Android 11, API 30, x86)

1 ответ

Эта проблема похожа на проблемы с утечкой памяти при получении WIFI_SERVICE.

При выполнении:

      activity.getSystemService(Context.WIFI_SERVICE);

Android Studio lint показывает следующее предупреждение.

      The WIFI_SERVICE must be looked up on the 
Application context or memory will leak on
devices < Android N. Try changing activity
to activity.getApplicationContext().

Хотя с NSD_SERVICE нет предупреждения о ворсе и потому что я вижу утечки памяти, ссылающиеся на NsdManager при использовании:

      activity.getSystemService(Context.NSD_SERVICE);

Я думаю, используя:

      activity.getApplicationContext().getSystemService(Context.NSD_SERVICE);

похоже на правильное действие.

Другие вопросы по тегам