我想知道如果我调用onSaveInstance()
或生命周期直接跳转onPause()
到.onStop()
finish()
onDestroy()
我还想知道是否onRetainNonConfigurationInstance()
总是调用 android.support.v4 库,或者只是在由于配置更改而重新创建活动时(当活动停止并放在后台堆栈时我可以信任它吗?)
谢谢
我想知道如果我调用onSaveInstance()
或生命周期直接跳转onPause()
到.onStop()
finish()
onDestroy()
我还想知道是否onRetainNonConfigurationInstance()
总是调用 android.support.v4 库,或者只是在由于配置更改而重新创建活动时(当活动停止并放在后台堆栈时我可以信任它吗?)
谢谢
这将回答您问题的第一部分。
如果您finish()
在 onCreate() 之外的任何地方调用,则onPause()
和onStop()
将被调用,但如果您从onCreate()调用它则不会:
您可以在此函数中调用 finish(),在这种情况下,将立即调用 onDestroy(),而不会执行任何其他活动生命周期(onStart()、onResume()、onPause() 等)。
onSaveInstanceState()
即使您finish()
在外部调用也不会被调用,onCreate()
因为用户将永远无法返回到活动,因此它永远不需要恢复其状态。
您几乎可以通过在所有这些方法上添加日志来测试您的第一个问题。至于你第二, 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 将广泛的状态从旧活动实例传播到新活动实例,从加载的位图到网络连接,再到均匀活跃运行的线程。