我想知道如果我调用onSaveInstance()
或生命周期直接跳转到onPause()
,是否会调用onStop()
,finish()
和onDestroy()
。
我还想知道是否总是调用android.support.v4库的onRetainNonConfigurationInstance()
,或者只是因为配置更改而重新创建活动时(我可以信任它,当活动停止并放在返回堆栈?)
感谢
答案 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 将旧的状态从旧活动实例传播到新活动实例 加载位图,网络连接,均匀主动运行 线程。