12
HTC Android developers contest, Киев, 15 мая 2010 года Разработчик Java для мобильных Валентин Коновалов Настоящий жизненный цикл приложений под Андроид

Настоящий жизненный цикл приложений под Android

Embed Size (px)

Citation preview

Page 1: Настоящий жизненный цикл приложений под Android

HTC Android developers contest, Киев, 15 мая 2010 года

Разработчик Java для мобильных Валентин Коновалов

Настоящий жизненный цикл приложений под Андроид

Page 2: Настоящий жизненный цикл приложений под Android

1. Классические грабли• Утечки памяти

• Инициализация частей программы только при первом запуске

• Потоки и сервисы продолжают работать после выхода из программы

• Неработоспособность программы после второго запуска

2

Page 3: Настоящий жизненный цикл приложений под Android

2. Официальный жизненный цикл Activity

3

Слабо объясняет что происходит

Page 4: Настоящий жизненный цикл приложений под Android

Запущен Не запущен

3. Жизненный цикл процесса

4

Page 5: Настоящий жизненный цикл приложений под Android

4. Состав процесса

5

FirstActivity LastActivitySecondActivity

FirstService

SecondService

FirstDataProvider SecondDataProvider

Page 6: Настоящий жизненный цикл приложений под Android

5. Стек Activity-объектов

6

Класс FirstActivity

1й объект FirstActivity

… объект FirstActivity

Последний объект FirstActivity

Может быть виден на экране

Page 7: Настоящий жизненный цикл приложений под Android

6. Неочевидный “домик”

7

При нажатии на кнопку “Домик” приложение сворачивается, но развернуться обратно может не то, что свернули

Page 8: Настоящий жизненный цикл приложений под Android

7. Только один экземпляр Activity?

8

Установить флаг android:launchMode="singleInstance”

ТАК ДЕЛАТЬ НЕ НАДО

Page 9: Настоящий жизненный цикл приложений под Android

8. Жизненный цикл Activity

9

Нет в памяти

Класс в памяти

Объект(ы) в памяти

Объект виден на экране

clinit()

Конструктор + onCreate() onResume()

onPause()finalize()

--

-- --

Page 10: Настоящий жизненный цикл приложений под Android

9. А где onDestroy???

10

Его нет в жизненном цикле, так-как:

1. onDestroy не означает уничтожение Activity2. onDestroy не всегда вызывается

onCreate() onDestroy()

Thread

Экземпляр Activity

Page 11: Настоящий жизненный цикл приложений под Android

10. Как освобождать память?

11

1. Все ссылки на Activity и на его объекты нужно делать null в onPause

2. Все потоки и сервисы, принадлежащие Activity, нужно останавливать в onPause

3. Все не-static ресурсы желательно удалять в onPause

Page 12: Настоящий жизненный цикл приложений под Android

Разработчик Java для мобильных

119021, Россия, Москва,ул. Льва Толстого, 16.

+7 (495) 739-00-00+7 (495) 739-70-70 — факс

[email protected]

Валентин Коновалов

Вопросы?