Вызывается ли onDestroy, только если вы явно вызываете finish()?? или есть какие-то исключения?

У меня есть LocalBroadcastReceiver и я unregistering это в моем ondestroy(),

Теперь я читаю о ondestroy() упомянутые в этих двух SO-ответах " он-построй-не-всегда-вызван" и " почему-внедрить-ондестрой-если-это-не-гарантировано-на- зов", а также в Документах Androi, которые

onDestroy будет вызываться, если вы явно вызываете finish();

Но почему в моем случае я не звоню finish() но до сих пор ondestroy() звонят каждый раз на всех моих устройствах Android. Также, по вашему мнению, ребята, где случаи, когда ondestroy() не вызывать.

Кроме того, даже если Android убьет мое приложение (из - за меньшую память) мне не нужно беспокоиться, как Android собирается убить все мое приложение так, приемник будет в конечном итоге убить.(Так что не будет никакой утечки памяти).

Так что для моего варианта использования, какие случаи там, где ondestroy() не будет вызван.

1 ответ

Решение

Но почему в моем случае я не вызываю метод finish(), а функция ondestroy() вызывается каждый раз на всех устройствах Android.

Реализация по умолчанию onBackPressed() - что вызывается кнопкой НАЗАД - звонки finish(),

где случаи, когда ondestroy() не вызывается.

  1. Если вы столкнулись с необработанным исключением

  2. Если ваш процесс завершен в срочном порядке (например, системе требуется оперативная память для обработки входящего телефонного звонка)

  3. Если пользователь нажимает "Force Stop" на экране вашего приложения в настройках

  4. На нескольких устройствах, если пользователь завершает ваш процесс, используя предоставленный производителем диспетчер задач

Кроме того, даже если Android убьет мое приложение (из-за недостатка памяти), мне не о чем беспокоиться, так как Android убьет все мое приложение, так что в конечном итоге получатель будет убит

Да, потому что весь ваш процесс будет прекращен.

Другие вопросы по тегам