Настоящий жизненный цикл приложений под android
TRANSCRIPT
HTC Android developers contest, Киев, 15 мая 2010 года
Разработчик Java для мобильных Валентин Коновалов
Настоящий жизненный цикл приложений под Андроид
1. Классические грабли• Утечки памяти
• Инициализация частей программы только при первом запуске
• Потоки и сервисы продолжают работать после выхода из программы
• Неработоспособность программы после второго запуска
2
2. Официальный жизненный цикл Activity
3
Слабо объясняет что происходит
Запущен Не запущен
3. Жизненный цикл процесса
4
4. Состав процесса
5
FirstActivity LastActivitySecondActivity
FirstService
SecondService
FirstDataProvider SecondDataProvider
5. Стек Activity-объектов
6
Класс FirstActivity
1й объект FirstActivity
… объект FirstActivity
Последний объект FirstActivity
Может быть виден на экране
6. Неочевидный “домик”
7
При нажатии на кнопку “Домик” приложение сворачивается, но развернуться обратно может не то, что свернули
7. Только один экземпляр Activity?
8
Установить флаг android:launchMode="singleInstance”
ТАК ДЕЛАТЬ НЕ НАДО
8. Жизненный цикл Activity
9
Нет в памяти
Класс в памяти
Объект(ы) в памяти
Объект виден на экране
clinit()
Конструктор + onCreate() onResume()
onPause()finalize()
--
-- --
9. А где onDestroy???
10
Его нет в жизненном цикле, так-как:
1. onDestroy не означает уничтожение Activity2. onDestroy не всегда вызывается
onCreate() onDestroy()
Thread
Экземпляр Activity
10. Как освобождать память?
11
1. Все ссылки на Activity и на его объекты нужно делать null в onPause
2. Все потоки и сервисы, принадлежащие Activity, нужно останавливать в onPause
3. Все не-static ресурсы желательно удалять в onPause
Разработчик Java для мобильных
119021, Россия, Москва,ул. Льва Толстого, 16.
+7 (495) 739-00-00+7 (495) 739-70-70 — факс
Валентин Коновалов
Вопросы?