了解isFinishing()

Kai*_*Kai 34 android

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

如果我打电话isFinishing()onPause(),返回值是什么isFinishing()呼,应在以下3个方案是什么?

  1. 由于finish()被调用,活动正在被杀死.
  2. 由于内存不足,活动不在前台,而活动(不是应用程序)被操作系统杀死.
  3. 活动将进入后台.

我确信在方案1中结果finish()将是真的,在方案3 中将是错误的.

情景2怎么样?在方案2中会isFinishing()返回true还是false

Ebo*_*ike 27

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

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

正如文档所说,保存所有持久数据onPause().onDestroy() 不保证被称为.

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

  • Android只会杀死进程.除非你做一些特殊的事情,否则你所有的活动都在同一个过程中运行,因此只能将所有活动一起杀死.无论如何,isFinishing()会告诉您活动是否实际完成.也就是说,用户永远不会返回它.如果它只是因为在后台被杀而不管怎么做都不是这种情况. (9认同)
  • 嗨Hackbod,我读了更多Android doc.你确定Android只会杀死进程吗?Android文档说'已停止的活动也仍然存在......但是,它不再对用户可见,并且当其他地方需要内存时,它可能会被系统杀死. - http://developer.android.com/guide/topics/fundamentals/activities.html.听起来Android系统可以杀死个别隐形活动. (5认同)
  • 谢谢,埃博迈克。Android 应该在 doc 中明确说明 Android 只会杀死进程,因此我们不会编写在堆栈中保留大量活动的应用程序。 (2认同)
  • 我仍然对是否应该使用isFinishing()或isDestroyed()来检查活动是否真的被破坏感到困惑. (2认同)