【问题标题】:Can we rely on onStop() being called?我们可以依赖 onStop() 被调用吗?
【发布时间】:2017-11-17 22:56:10
【问题描述】:

关于 Android 的 Activity 生命周期,我看到它广泛声称(在 SO 和其他地方)持久数据应该保存在 onPause() 方法中,因为不能保证 onStop() 会被调用,因为操作系统如果系统资源不足,可能需要终止活动以回收其资源。

但是,在我正在阅读的一本书中,情况正好相反:

实际上,操作系统不会回收可见的(暂停或 恢复)> 活动。 活动不会被标记为“可杀死”,直到 onStop() 被调用并完成执行。

[谈论隐藏 状态和活动记录一点]

请注意,您的活动可以在没有 onDestroy() 被调用。 您可以依靠 onStop() 和 onSaveInstanceState(Bundle) 被调用(除非有什么东西消失了 设备上的错误)... 覆盖 onStop() 以保存任何 永久数据,例如用户正在编辑的内容,因为您的 在此方法返回后,活动可能随时被终止。

p70-71,Android 编程:大书呆子牧场指南,第 3 版 (强调我的)


多部分问题:

  • 这是(应用程序在 onStop() 之前被杀死的可能性是 被称为)不再真实的东西,并且仍然存在 传播,还是这本书完全错误?

  • Activity 何时或为何会被杀死是否存在细微差别? 回答“有时?”

  • 如果这本书是正确的,为什么这种误解会如此广泛传播? (例如Hereherehere.

如果参考官方文档将不胜感激。

【问题讨论】:

  • 编辑:添加了有关 onPause() 与 onStop() 保证的其他答案的链接

标签: android android-lifecycle activity-lifecycle


【解决方案1】:

这是 Activity 生命周期的示意图:

根据official Android documentation

onPause() 执行非常短暂,不一定负担得起 足够的时间来执行保存操作。为此,您应该 不使用 onPause() 保存应用程序或用户数据,使网络 调用或执行数据库事务;此类工作可能无法完成 在方法完成之前。相反,您应该执行 heavy-load onStop() 期间的关闭操作。有关更多信息 适合在 onStop() 期间执行的操作,see onStop()

当应用程序从onPause() 变为onCreate() 而没有onStop()onDestroy() 的情况下,另一个具有更高优先级的应用程序需要内存,如图所示。

另外,该活动可以在不调用onStart()的情况下被销毁, onStop() 当你在 onCreate() 上调用 finish() 方法时@ see reference

【讨论】:

    猜你喜欢
    • 2011-01-23
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2010-12-15
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多