Неужели ондестрой не всегда называется?

Я поместил код очистки кеша в onDestroy моей деятельности, но большую часть времени код не выполняется, если я не завершу действие через finish(),

Редактировать: просто читать onDestroy вызывается только с finish() или если в системе мало ресурсов. Так, где я должен поместить свой код очистки кэша? Если я положу это в onPause() и пользователь возвращается в приложение, кэш очищается. Я на самом деле храню важные временные файлы в кэше, которые не должны быть удалены в onPause,

3 ответа

Решение

Из документации для разработчиков Android:

защищенный void onDestroy ()

Добавлено на уровне API 1. Выполните окончательную очистку перед уничтожением действия. Это может произойти либо из-за того, что действие заканчивается (кто-то вызвал finish() на нем, либо из-за того, что система временно уничтожает этот экземпляр действия для экономии места. Вы можете различить эти два сценария с помощью метода isFinishing().

Примечание: не рассчитывайте, что этот метод вызывается как место для сохранения данных! Например, если действие редактирует данные в поставщике контента, эти изменения должны быть зафиксированы либо в onPause(), либо в onSaveInstanceState(Bundle), а не здесь. Этот метод обычно реализуется для освобождения ресурсов, таких как потоки, которые связаны с действием, так что уничтоженное действие не оставляет таких вещей, пока остальная часть его приложения все еще выполняется. Существуют ситуации, когда система просто убивает процесс хостинга действия, не вызывая этот метод (или любой другой) в нем, поэтому его не следует использовать для выполнения действий, которые должны остаться после завершения процесса.

Вы можете переместить свой код в onPause() или же onStop()

Попробуйте использовать onstop

как это

@Override
    protected void onStop() {
        super.onStop();
       //write your code here
    }

ondestroy чаще всего вызывается, когда система полностью удаляет активность из памяти, или когда пользователь убивает активность, вы хотите сохранить свои данные в режиме паузы, поскольку это всегда будет вызываться перед уничтожением.

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