Понимание isFinishing()

Я смутился после прочтения Android doc о isFinishing() в http://developer.android.com/reference/android/app/Activity.html

Если я вызываю isFinishing() в onPause(), какое возвращаемое значение вызова isFinishing() должно быть в следующих трех сценариях?

  • Активность убивается из-за вызова finish().
  • Активность не находится на переднем плане, и активность (а не приложение) убивается ОС из-за низкой памяти.
  • Работа будет фоновой.

Я уверен, что результат isFinishing() будет истинным в сценарии 1 и будет ложным в сценарии 3.

Как насчет сценария 2? Будет ли isFinishing() возвращать true или false в сценарии 2?

Ответ 1

Ваша активность не будет уничтожена ОС, пока она находится на переднем плане. Это не имеет смысла.

Однако, если действие переходит на задний план, потому что пользователь переключился на другое приложение, его можно было убить после обработки onPause(). Таким образом, вы можете получить isFinishing() == false, когда пользователь переключится на новое приложение, но затем приложение будет убито.

Как говорит документ, сохраните все постоянные данные в onPause(). onDestroy() не гарантируется.

(Я не удивлюсь, если Диана вступит и поправит меня здесь, кстати.)

Ответ 2

Как вызвать onPause? 2 способа: действие переходит к фону или мы называем finish() где-то. Если действие переходит к фону, isFinishing() является ложным. Если мы назовем finish(), isFinishing() - true. И теперь см. Сценарий 2: активность не находится на переднем плане, и активность (а не приложение) убивается ОС из-за низкой памяти. Активность будет убита, поэтому она будет находиться в фоновом режиме, она приостановлена, поэтому onPause не будет вызван. BTW, активность не может быть убита, только процесс может быть убит