【问题标题】:Activity lifecycle after finish() has calledfinish() 调用后的活动生命周期
【发布时间】:2013-05-30 21:40:00
【问题描述】:

我想知道如果我调用finish() 或生命周期直接跳转到onDestroy(),是否会调用onSaveInstance()onPause()onStop()

我也想知道 android.support.v4 库的onRetainNonConfigurationInstance() 是否总是被调用,或者只是在由于配置更改而重新创建活动时(当活动停止并放在后台堆栈时我可以信任它吗? )

谢谢

【问题讨论】:

标签: android android-lifecycle android-support-library


【解决方案1】:

这将回答您问题的第一部分。

如果您在 onCreate() 之外的任何位置调用 finish(),则将调用 onPause()onStop(),但如果您从 onCreate() 调用它则不会:

你可以在这个函数中调用finish(),在这种情况下 onDestroy() 将立即被调用,没有任何其余的 活动生命周期(onStart()、onResume()、onPause() 等)正在执行。

即使您在onCreate() 之外调用finish(),也不会调用onSaveInstanceState(),因为用户将永远无法返回到活动,因此它永远不需要恢复其状态。

【讨论】:

  • 知道了!非常感谢。现在我对 Activity 的生命周期有了清晰的认识(文档通常会分散这些有用的信息,这无助于立即弄清楚)。再次感谢
【解决方案2】:

您几乎可以通过在所有这些方法上添加日志来测试您的第一个问题。至于你第二个, onRetainNonConfigurationInstance() 在重新创建时被调用。

该方法用于ActivityThread类中销毁activity,代码如下:

3424try {
3425    r.lastNonConfigurationInstances
3426            = r.activity.retainNonConfigurationInstances();
3427} catch (Exception e) {
3428    if (!mInstrumentation.onException(r.activity, e)) {

activity.retainNonConfigurationInstances();然后会触发onRetainNonConfigurationInstance()

另外,如果您查看docs,这里有一些重要的行:

总是会立即创建一个新的活动实例 在这个 onDestroy() 被调用之后。特别是没有消息 将在这段时间内调度(当返回的对象没有 有要关联的活动)。您在此处返回的对象 将始终可从 getLastNonConfigurationInstance() 此处描述的以下活动实例的方法。这些 设计保证,以便活动可以使用此 API 来 将广泛的状态从旧的活动实例传播到新的活动实例,从 加载位图,到网络连接,到均匀主动运行 线程。

【讨论】:

  • 谢谢!我曾尝试记录回调,但我想确保我做对了 :-) 这满足了我的需求。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2013-01-13
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多