При получении 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);
похоже на правильное действие.