是否保证调用 Activity.onStop() (API 11 +)
Posted
技术标签:
【中文标题】是否保证调用 Activity.onStop() (API 11 +)【英文标题】:Is Activity.onStop() guaranteed to be called (API 11 +) 【发布时间】:2015-06-06 08:36:10 【问题描述】:从文档中不清楚(至少对我来说)是否保证调用 Activity.onStop。有两个地方的信息看似矛盾。
-
Activity.onStop 的 Javadoc:
请注意,在调用 onPause() 方法后系统没有足够内存来保持 Activity 进程运行的低内存情况下,可能永远不会调用此方法。
-
Activity 类http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle 的文档(尤其是“Killable”列):
从 Honeycomb 开始,应用程序在其 onStop() 返回之前不会处于可终止状态。这会影响何时可以调用 onSaveInstanceState(Bundle)(它可以在 onPause() 之后安全调用,并允许应用程序安全地等待 onStop() 以保存持久状态。
要找到一种让两份文档都说真话的方法有点困难。我能想到的唯一场景是:假设您正在目标 API 21(最小 sdk 10)上开发并使用 onStop() 方法编写一个 Activity。如果您随后在 API 10 手机上运行此应用程序,则不能保证调用 onStop()。这种情况意味着上面第 1 点和第 2 点的文档都是正确的。否则,其中之一一定是假的。
【问题讨论】:
【参考方案1】:
Activity.onStop()
是否保证被调用(API 11 +)
是的,保证在后Honeycomb设备(API 11 +)上调用它
来源1:Video tutorial on Activity life cycle - taught by Google developer advocate
来源2:https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
来源 3:AndroidLifeCycle article on www.vogella.com
【讨论】:
但是,你知道为什么 Android 文档会显示其他 - 文档显示 onStop() 对所有版本都是可杀的,并显示 onPause() 在 pre-honeycomb 中是可杀的 - i.imgur.com /CYpQdSL.png (developer.android.com/reference/android/app/Activity.html) 在您提供的同一链接中,在表格下方,文档显示从 Honeycomb 开始,应用程序在其 onStop() 返回之前不会处于可终止状态。跨度> 是不是表示表格里面的信息不准确? 可能是他们没有更新表格或忽略了它。要添加更多证明我的答案正确的证据,您可以观看视频(答案中的 Source1)。它是由 Reto Meier(在谷歌工作)教授的。链接到他的个人资料:- twitter.com/retomeier,medium.com/@retomeier,linkedin.com/in/retomeier【参考方案2】:如果你再往下看ActivityLifeCycle reference,它会说:
对于那些没有被标记为可杀死的方法,activity的进程不会被系统杀死,从方法被调用开始,返回后继续。因此,activity 处于可终止状态,例如,在 onPause() 之后到 onResume() 开始之间。
由于这似乎强化了第 1 点,我会在保守方面犯错,并设计和计划我的代码,就好像第 1 点是正确的,而忽略第 2 点。
【讨论】:
以上是关于是否保证调用 Activity.onStop() (API 11 +)的主要内容,如果未能解决你的问题,请参考以下文章
BeginRead 是不是保证读取在调用它之后到达的任何传入字节?
如果我在排序映射上调用键,结果seq是否保证按排序顺序排列?