Pull to refresh

Comments 6

Статья хорошая. Как программисту мне это интересно. А еще я пользователь смартфона с маленькой памятью, поэтому я знаю, что в большинстве приложений работа с activity реализована неправильно, но разработчики приложений считают, что это нормально.
Гугл вполне четко говорит, что нет никакой гарантии что onDestroy будет вызван.
Согласен, но статья не претендует на открытие тайн :)
На блок-схеме гугл-девелопера есть стрелка уводящая от onDestroy() с подписью
Apps with higher priority need memory
Хотя другая, ведущая к onDestroy() подписана
This activity is finishing or being destroyed by the system
Достаточно двусмысленно выглядит и оставляет вопрос: «а что должно произойти, чтобы система уничтожила не финишированное вручную Activity с помощью onDestroy()?
Nexus S, Android 4.1.2. Поведение следующее:
onDestroy A вызывается стабильно на каждом переходе A→B.
onDestroy A вызывается стабильно при A → Home. Процесс при этом не обязательно умирает. Если подзагрузить систему и дождаться смерти процесса, то при перезапуске сохраняется activity stack, приложение помнит последнее запущенное активити.
Что касается до Force stop, то он ожидаемо убивает процесс и обнуляет activity stack. Лог Force finishing activity ActivityRecord для каждого активити как-бы намекает, что запись удалена и информация о последнем запущенном activity утеряна.

Как результат, предсказуемое поведение и остается только догадываться почему у нас отличается второй сценарий, где у Вас не вызывается onDestroy. Не стоит также забывать, что «Это Андроид, детка!» и прихоти всяких «оптимизаторов» от сторонних производителей всегда будут вносить свои коррективы.
Поведение с вызовом onDestroy достаточно странное, учитывая, что у меня та же модель с той же версией 4.1.2 :) Остальное же, действительно, предсказуемо.
Никаких дополнительных флагов и параметров в манифесте, как я понимаю? Я бы тогда даже осмелился сказать, что он работает неверно, т.к. onDestroy не должен вызываться каждый раз, когда Activity исчезает с экрана, иначе не было бы смысла в onStop (который будет вызываться обязательно) и onRestart.
Есть предположение, что стоит галочка в Developer options/Apps/Don't keep activities. Можете проверить для подтверждения теории? Самому интересно.
Прошу пардону! Действительно, забыл что выставил don't keep activities для другого проекта. В таком случае я разделяю Ваше недоумение по поводу onDestroy. Без галочки процесс молча умирает даже не пискнув.
Sign up to leave a comment.

Articles