根据http://developer.android.com/training/basics/activity-lifecycle/recreating.html
有多种方法可以触发活动娱乐。
- 屏幕旋转
- 内存不足
我意识到屏幕旋转和低内存条件会产生完全不同的行为。
一个明显的观察结果是,为了从长期压制的家中恢复活动,它也会破坏和重建Application
。
对于屏幕旋转,它不会产生这种行为。
我可以知道,如何区分Activity
或Fragment
区分这两种情况?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Is this caused by screen rotation? Or restoration from low memory condition?
// How can we differentiate among "screen rotation", or "restoration from low memory condition"?
} else {
}
...
}
p/s 要产生内存不足的情况,请执行以下步骤。
- 按主页将应用程序放入后台堆栈。
- 启动内存密集型应用程序。
- 按回家。
- 对其他应用重复步骤 2-3 5 次。
- 再次启动第一个应用程序。
- 你会意识到
savedInstanceState
不是空的。但是,与此同时,您会意识到当前运行的Application
实例与第一次启动的不同。
除了从低内存条件恢复时静态成员会变得未初始化之外,我还遇到了一些奇怪的东西
- 通过父活动启动子活动
startActivityForResult
- 执行以上 6 个步骤。
- 关闭子活动。
- 我们可以观察到父活动的片段具有以下生命周期。
onCreate
->onActivityResult
->onResume
我们期待onCreate
-> onResume
->onActivityResult