【问题标题】:Is Activity.onStop() guaranteed to be called (API 11 +)是否保证调用 Activity.onStop() (API 11 +)
【发布时间】:2015-06-06 08:36:10
【问题描述】:

从文档中不清楚(至少对我来说)是否保证调用 Activity.onStop。有两个地方的信息看似矛盾。

  1. Activity.onStop 的 Javadoc:

请注意,在调用 onPause() 方法后系统没有足够内存来保持 Activity 进程运行的低内存情况下,可能永远不会调用此方法。

  1. 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 点的文档都是正确的。否则,其中之一一定是假的。

【问题讨论】:

    标签: android-activity activity-lifecycle


    【解决方案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/retomeiermedium.com/@retomeierlinkedin.com/in/retomeier
    【解决方案2】:

    如果你再往下看ActivityLifeCycle reference,它会说:

    对于那些没有被标记为可杀死的方法,activity的进程不会被系统杀死,从方法被调用开始,返回后继续。因此,activity 处于可终止状态,例如,在 onPause() 之后到 onResume() 开始之间

    由于这似乎强化了第 1 点,我会在保守方面犯错,并设计和计划我的代码,就好像第 1 点是正确的,而忽略第 2 点。

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多