我认为我对活动生命周期和捆绑的想法 有点困惑,你能帮帮我吗?
假设用户从主屏幕打开活动A ,
活动A “调用”活动B ,它会填满屏幕
在此活动{@ 1}}上调用活动A ,然后调用onSaveInstanceState()
和onPause()
。
由于系统上当前运行的应用程序太多,
andorid决定终止主持活动A 的进程。
当用户导航回活动A 时,会调用onCreate(),我们可以
使用bundle(在onSaveInstaceStae()的最后一次调用期间设置)来恢复状态。
然后onStop()
,onStart()
并呼叫onRestoreInsanceState()
,
我是对的吗?
然后让我们假设用户按下后退键以退出活动A
活动A 依次调用onResume()
,onPause()
和onStop()
(onDestory()
的调用可能会被推迟)
在这种情况下不应该调用onDestroy()
。
当用户稍后再次打开活动A 时,然后打开捆绑包 传递给 onCreate()为空,对吧?
现在假设用户旋转屏幕
onSaveInsanceState()
,onSaveInsanceState()
,OnPause()
,OnStop()
被称为
然后OnDestroy()
使用最后一次调用onCreate()
设置的捆绑包,
然后是onStart()和onRestore()。
我是对的吗?
我的猜测是:
当用户创建活动时,传递给onSaveInsanceState()
的包总是为空,并且永远不会调用onCreate()
,但是当系统创建它时,例如当它因内存不足而杀死活动时或者由于旋转事件,传递的包是最后一次调用onSaveInstanceState()所设置的包。
我猜对了吗?
感谢和抱歉我的英语不好。
P.S。 :我认为onRestoreState()
传递的是同一个包传递onRestoreInstanceState()
但通常使用onCreate()
恢复状态。
答案 0 :(得分:0)
有趣的问题 - 从未考虑过它。
请查看文档onCreate()
和onSaveInstanceState()
。
这至少回答了你的问题:Bundle将被提供给onCreate()
。
不幸的是,没有关于调用哪些事件onSaveInstanceState()
的确切定义,但我猜它在所有相关情况下默认调用(无论它们是什么......),但是你可以找到某些情况(例如,通过将Log.i()放入LogCat来旋转屏幕。
答案 1 :(得分:0)
onRestoreInstanceState()传递相同的bundle传递onCreate()是正确的,并且系统通过调用onCreate()重启活动并且还调用onRestoreInstanceState(),如果从onCreate()获取,则bundle将为null活动开始了。
答案 2 :(得分:0)
由于系统上当前运行的应用程序太多, andorid决定终止主持活动A的进程。
这是一种非常常见的情况。此外 - 您可以使用开发人员选项模拟此操作。
在这种情况下,每个进入后台的活动都将被自动销毁。
当使用非null Bundle调用OnCreate时,我只能从我的记忆中得到两种情况。首先 - 如上所述。第二种情况 - 屏幕旋转。
当您启动应用Android calles
时之后让屏幕旋转。 Android会调用
您可以找到有关recreating
主题的更多信息