Android: при выходе из приложения? - PullRequest
0 голосов
/ 14 октября 2010

Я понимаю, когда действие закрывается, вызывается onDestroy ().Но это не всегда сделано правильно?Иногда вызывается onPause ().

Итак, предположим, что я хочу очистить память, когда активность закрывается, где именно это сделать?Поскольку onDestory не может быть вызван, я тоже не могу держать его там правильно?

Разработка: у меня есть 2 действия А1 и А2.A1 запускается при запуске приложения.А1 звонит А2 позже.Предположим, я создал объект класса в onCreate () Деятельности A1.Этот объект должен быть удален при выходе из приложения, т.е. когда приложение больше не отображается.Это лучшее место, чтобы сделать это onDestroy () или onStop () из A1?Я предполагаю, что onPause () может быть неправильным местом, потому что onPause () будет вызываться, когда A1 вызывает A2, и я не хочу тогда удалять объект.

-Kiki

Ответы [ 3 ]

3 голосов
/ 14 октября 2010

Я думаю, что вы имеете в виду onPause (), метода onSuspend () нет. Если ваша деятельность закрывается чисто, она вызовет onStop () и onDestroy ().

Если системе не хватает памяти и она хочет прервать вашу деятельность, то onPause () гарантированно будет вызван до того, как ваш процесс будет остановлен, но это единственная гарантия. Методы onStop () и onDestroy () не могут быть вызваны. Таким образом, вы должны очистить в onPause ().

Однако ... не забывайте, что ваша деятельность может переходить много раз между onResume () и onPause (), поэтому вы не хотите делать слишком много выделений и очисток в этих двух методах, они должны быть быстрыми.

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

1 голос
/ 14 октября 2010

Я не думаю, что onSuspend () существует.Это не упоминается внутри документации.Возможно, вы имеете в виду onStop ().

Когда вызывается onStop (), действие больше не отображается, но еще не уничтожено.Прекращение действительно происходит после вызова onDestroy (), независимо от того, завершается ли он вызовом finish () или требованиями к памяти из Android, как указано в документации.Тогда, на мой взгляд, правильное место для освобождения памяти - onDestroy ().

Если вам нужно остановить операции с высокой загрузкой процессора, связанные с взаимодействием с пользователем, выполните это в onPause ().

1 голос
/ 14 октября 2010

Документы Google говорят, что нужно выполнить действия, которые необходимо выполнить перед выходом, в onPause (), потому что да, в ситуациях с нехваткой памяти onDestroy () может не вызываться.

...