活动生命周期?

时间:2011-11-18 10:58:27

标签: android android-activity bundle lifecycle

我认为我对活动生命周期和捆绑的想法 有点困惑,你能帮帮我吗?

假设用户从主屏幕打开活动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()恢复状态。

3 个答案:

答案 0 :(得分:0)

有趣的问题 - 从未考虑过它。

请查看文档onCreate()onSaveInstanceState()

这至少回答了你的问题:Bundle将被提供给onCreate()

不幸的是,没有关于调用哪些事件onSaveInstanceState()的确切定义,但我猜它在所有相关情况下默认调用(无论它们是什么......),但是你可以找到某些情况(例如,通过将Log.i()放入LogCat来旋转屏幕。

答案 1 :(得分:0)

onRestoreInstanceState()传递相同的bundle传递onCreate()是正确的,并且系统通过调用onCreate()重启活动并且还调用onRestoreInstanceState(),如果从onCreate()获取,则bundle将为null活动开始了。

答案 2 :(得分:0)

  

由于系统上当前运行的应用程序太多,   andorid决定终止主持活动A的进程。

这是一种非常常见的情况。此外 - 您可以使用开发人员选项模拟此操作。

enter image description here

在这种情况下,每个进入后台的活动都将被自动销毁。

关于OnCreate中的Bundle。

当使用非null Bundle调用OnCreate时,我只能从我的记忆中得到两种情况。首先 - 如上所述。第二种情况 - 屏幕旋转。

当您启动应用Android calles

  • 的onCreate
  • 在onStart
  • 的onResume

之后让屏幕旋转。 Android会调用

  • 的onSaveInstanceState
  • 的onPause
  • 的onStop
  • 的onDestroy
  • 的onCreate
  • 在onStart
  • onRestoreInstanceState
  • 的onResume

您可以找到有关recreating

主题的更多信息