了解isFinishing()

时间:2011-03-08 00:42:45

标签: android

http://developer.android.com/reference/android/app/Activity.html阅读有关isFinishing()的Android文档后,我感到困惑。

如果我在isFinishing()中致电onPause(),那么isFinishing()来电的返回值将在以下3个情景中得到什么?

  1. 由于finish()被调用,活动被终止。
  2. 由于内存不足,活动不在前台,活动(不是应用程序)被操作系统杀死。
  3. 活动即将落户。
  4. 我确信在方案1中isFinishing()的结果将为真,在方案3中将为 false

    情景2怎么样?情景2中isFinishing()会返回 true false 吗?

3 个答案:

答案 0 :(得分:26)

当操作系统位于前台时,您的活动不会被操作系统杀死。这没有意义。

但是,如果活动因为用户切换到其他应用而进入后台,则可能会在onPause()处理后被杀死。因此,当用户切换到新应用时,您可以获得isFinishing() == false,但随后应用程序将被终止。

正如文档所述,保存onPause()中的所有持久数据。 onDestroy()无法保证被调用。

(如果Dianne介入并在此纠正我,我不会感到惊讶,顺便说一句。)

答案 1 :(得分:1)

如何调用onPause? 2种方式:活动转到后台或我们在某处调用finish()。如果活动转到后台,则isFinishing()为false。如果我们调用finish(),则isFinishing()为true。现在看情况2:由于内存不足,活动不在前台,活动(不是应用程序)被操作系统杀死。一个活动将被杀死,所以它冥想在后台,它被暂停,所以onPause不会被调用。 顺便说一句,一个活动不能被杀死,只有进程才能被杀死

答案 2 :(得分:-1)

isFinishing()在除onDestroy()以外的活动的所有方法中都返回false。
有关更多信息,请在以下所有活动方法中添加日志

Log.i("onCreate",""+isFinishing);