0

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

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

谢谢

4

2 回答 2

6

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

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

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

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

于 2013-05-30T22:04:29.153 回答
1

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

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

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

活动.retainNonConfigurationInstances(); 然后会触发 onRetainNonConfigurationInstance()

而且,如果您查看文档,这里有一些重要的行:

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

于 2013-05-30T22:11:36.207 回答