Зачем использовать onDestroy(), если он не гарантированно называется?

В соответствии с жизненным циклом активности андроида, единственный вызываемый вызов, который должен быть вызван (если активность когда-либо покидает состояние Running, которое обычно ожидается) составляет onPause().

Итак, я должен предположить, что существуют сценарии, в которых имеет смысл реализовать onStop() и onDestroy(), хотя на самом деле они не гарантируются.

Я понимаю, что onStop() должен быть реализован, когда возможно, что действие вернется в состояние Running через состояние Stopped (почему бы ему это сделать, а не возвращать напрямую - это другой вопрос).

Но необходимость onDestroy(), когда я могу разместить всю очистку/сохранение состояния в onPause(), мне непонятно.

Можете ли вы описать ситуацию с реальным приложением (т.е. не аналогию с вождением автомобиля и т.д.), в которой было бы целесообразно реализовать onDestroy()?

Ответ 1

onDestroy вызывается, если вы явно вызываете finish(); сами.

Ваш основной вид деятельности вызывает startActivityForResult на активность карты.

Активность карты с помощью LocationListener, пользователь нажимает на карту и выбирает локальный ресторан.

Затем выполняется настройка некоторых дополнительных функций, которые будут отправлены обратно в основное действие, затем явным образом вызывается finish(); на себе и в onDestroy убивает LocationListener и другие переменные, которые вы вызывали.

Просто нашел это в документах

onDestroy() = Последний звонок, который вы получаете до того, как ваша деятельность будет уничтожена. Это может произойти либо потому, что активность завершается (кто-то называется finish() на нем, либо потому, что система временно уничтожает этот экземпляр активности для экономии места. Вы можете различать эти два сценария с методом isFinishing().

Ответ 2

Можете ли вы описать ситуацию с реальным приложением (то есть не аналогии с вождением автомобиля и т.д.), в котором было бы целесообразно реализовать onDestroy()?

Если вы хотите зафиксировать изменение конфигурации. Все это в SDK: http://developer.android.com/reference/android/app/Activity.html