Утечка памяти в android приложении
Мое приложение состоит из Activity и Service. Сервис делает основную работу (передает данные в фоновом режиме на сервер), Activity используется для управления сервисом.
Первоначально запускается Activity, в нем запускается сервис:
@Override
public void onResume() {
super.onResume();
startService(new Intent(this, LocService.class));
}
Далее Activity можно закрыть, а сервис оставить работать, либо полностью закрыть приложение (с остановкой сервиса).
Сервис создает в трее Notification. Активити можно повторно открыть через трей или иконку на рабочем столе.
Так вот, при повторном открытии Activity память потребляемая приложением постоянно увеличивается. Может конечно это и нормальный процесс и потом сборщик мусора ее уберет, а может утечка.
Вижу возможные места утечки памяти:
-
При создании сервиса. При каждом создании Activity запускается новый экземпляр сервиса? Но с другой стороны однократный вызов
stopService(new Intent(this, LocService.class)); убивает сервис.
-
При запуске активити каждый раз создается новый экземпляр, при этом выделение памяти неизбежно. Остается надеяться на мусорщика, что он все почистит.
PS: Запуск Activity через Notification происходит с флагами
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | intent.FLAG_ACTIVITY_SINGLE_TOP);
иначе создавался второй экземпляр Activity и выход из него по кнопке Back приводил к предыдущему экземпляру Activity. Сейчас все корректно.