Простой вопрос: можете ли вы быть уверены, что finish()
позвонит onDestroy()
? Я не нашел никаких подтверждений этому.
Android: будет ли метод finish() ВСЕГДА вызывать onDestroy()?
Ответы (2)
Простой вопрос: можете ли вы быть уверены, что finish() вызовет onDestroy()?
Во-первых, этот ответ предполагает, что вы имеете в виду класс Android Activity
и его метод finish()
и метод жизненного цикла onDestroy()
.
Во-вторых, это зависит от вашего определения «конечно»:
Ваш процесс может быть остановлен между
finish()
иonDestroy()
по причинам, не зависящим от того, что вызывает вызовfinish()
.Производитель устройства или моддер ПЗУ может внести какое-то странное изменение, которое разорвет связь между
finish()
иonDestroy()
.Батарея может разрядиться между
finish()
иonDestroy()
.И т.п.
В-третьих, finish()
не звонит onDestroy()
. Вы можете убедиться в этом, прочитав исходник код. finish()
обычно вызывает вызов onDestroy()
.
Вообще говоря, finish()
в конечном итоге приведет к вызову onDestroy()
.
onDestroy()
для этого действия.
- person CommonsWare; 02.07.2017
finish()
не final
, поэтому его можно переопределить, и реализация переопределения может в некоторых случаях по какой-то странной причине не связываться с суперклассом. И, по крайней мере, теоретически возможен сбой между finish()
и onDestroy()
, хотя я не знаю никаких сценариев для этого.
- person CommonsWare; 03.11.2020
onDestroy
и finish
и добавил журналы только для того, чтобы убедиться, что они действительно вызываются. Это действительно странно, но по какой-то причине я назвал finish
, а не onDestroy
. Вот почему я спрашиваю. Я впервые вижу такую странную вещь. Тоже без понятия как исправить. И дело не в том, что у пользовательского интерфейса нет возможности что-либо сделать. Я видел, как finish
вызывался несколько раз позже, и все же Activity не вызывал onDestroy
ни разу.
- person android developer; 04.11.2020
Нет, вы не можете быть уверены!
Вызов finish() обычно вызывает onDestroy() в соответствии с жизненным циклом Activity, но вы не можете полагаться на него. Специально не для сохранения ваших данных. В документации четко сказано
do not count on this method being called as a place for saving data!