2013-11-10 3 views
19

Простой вопрос: можете быть уверены, что finish() позвонит onDestroy()? Я не нашел подтверждения об этом.Android: закончится() ВСЕГДА вызовите onDestroy()?

+0

http://stackoverflow.com/questions/10847526/what-exactly-activity-finish-method-is-doing#answer-10862977 – BackSlash

+1

не всегда, о чем говорится в документации – Blackbelt

+0

@blackbelt , не могли бы вы обратиться к этой конкретной документации? – Xander

ответ

38

Простой вопрос: можете ли вы быть уверены, что finish() будет вызывать onDestroy()?

Во-первых, этот ответ предполагает, что вы имеете в виду Activity класса Android, и его метод finish() и onDestroy() метода жизненного цикла.

Во-вторых, это зависит от вашего определения «уверен»:

  • Ваш процесс может быть прекращен между finish() и onDestroy(), по причинам, не зависящим от все, что запуская вызов finish()

  • Изготовитель устройства или модем ROM мог бы внести некоторые вихревые изменения, которые нарушили бы соединение между finish() и onDestroy()

  • батарея может идти мертвым между finish() и onDestroy()

  • Etc.

В-третьих, finish() не вызовonDestroy(). Об этом можно узнать, прочитав the source code. finish() обычно вызывает звонок до onDestroy().

Вообще говоря, finish() в конечном итоге приведет к выходу onDestroy().

+0

В рамках процесса можно ли опираться на onDestroy()? Скажем, у меня есть операции A, B, C, D, E и вы хотите закончить все, кроме E, тогда будут вызваны все методы onDestroy()? Состояние батареи и памяти здесь не учитывается. – Jenix

+1

@Jenix: Если процесс не завершен, и вы не вызываете крах (необработанное исключение), то завершение операции приведет к вызову 'onDestroy()' для этой активности. – CommonsWare

+0

Слишком быстро ха-ха. Спасибо! – Jenix

6

Нет, вы не можете быть уверены!

Calling finish() обычно запускает onDestroy() в соответствии с жизненным циклом активности, но вы не можете положиться на него. В частности, не для сохранения ваших данных. Documentation ясно говорит

do not count on this method being called as a place for saving data! 
Смежные вопросы