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

Android finish()之后的活动生命周期已调用,android,android-lifecycle,android-support-library,Android,Android Lifecycle,Android Support Library,我想知道如果我调用finish(),或者生命周期直接跳到onDestroy(),是否会调用onSaveInstance()、onPause()和onStop() 我还想知道android.support.v4库的onRetainonConfiguration Instance()是否总是被调用,或者仅仅在由于配置更改而重新创建活动时调用(当活动停止并放在后台时,我可以信任它吗?) 谢谢这将回答您问题的第一部分 如果在onCreate()之外的任何位置调用finish(),则将调用onPause(

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

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


谢谢

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

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

您可以在此函数中调用finish(),在这种情况下 将立即调用onDestroy(),而不调用 正在执行活动生命周期(onStart()、onResume()、onPause()等)


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

您可以通过在所有这些方法上添加日志来测试自己的第一个问题。对于您来说,onRetainonConfiguration实例()在重新创建时被调用

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

3424try {
3425    r.lastNonConfigurationInstances
3426            = r.activity.retainNonConfigurationInstances();
3427} catch (Exception e) {
3428    if (!mInstrumentation.onException(r.activity, e)) {
activity.retainonconfigurationInstances();然后将触发onRetainonConfiguration实例()

另外,如果你看一下,这里有一些重要的句子:

始终会立即创建活动的新实例 在调用这个函数的onDestroy()之后。特别是,没有消息 将在此期间被调度(当返回的对象没有 具有要关联的活动)。你在这里返回的对象 将始终从getLastNonConfigurationInstance()中可用 方法创建以下活动实例,如此处所述。这些 保证的设计使活动可以使用此API 将扩展状态从旧活动实例传播到新活动实例,从 加载的位图、到网络连接、到均匀活动运行 线程


非常感谢。我试图记录回调,但我想确保我做对了:-)这满足了我的需要。明白了!非常感谢你。现在,我对活动的生命周期有了一个清晰的观点(文档经常分散这些有用的信息,这无助于立即将其弄清楚)。同样,thanksIt取决于调用finish()的时间,请参见: