finish()调用后的活动生命周期

时间:2013-05-30 21:40:00

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

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

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

感谢

2 个答案:

答案 0 :(得分:6)

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

如果您在onCreate()之外的任何地方拨打finish(),则会调用onPause()onStop(),但如果您从onCreate()调用它,则不会:

  

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

即使您在onSaveInstanceState()之外调用finish(),也不会调用

onCreate(),因为用户永远无法返回活动,因此永远不需要恢复其状态

答案 1 :(得分:1)

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

此方法在ActivityThread类中用于破坏活动,并具有以下代码行:

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   将旧的状态从旧活动实例传播到新活动实例   加载位图,网络连接,均匀主动运行   线程。