http://developer.android.com/training/basics/activity-lifecycle/recreating.htmlによると
アクティビティのレクリエーションをトリガーするには、さまざまな方法があります。
- 画面の回転
- メモリ不足状態
画面の回転とメモリ不足の状態では、まったく異なる動作が発生することがわかりました。
明らかな観察結果の 1 つは、長押ししたホームからの復元アクティビティでは、破壊と再作成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
null ではないことがわかります。ただし、同時に、現在実行中のApplication
インスタンスが最初に起動したインスタンスとは異なることに気付くでしょう。
メモリ不足の状態から復元するときに静的メンバーが初期化されないことに加えて、いくつかの奇妙なものにも遭遇します
- 経由で親アクティビティから子アクティビティを起動します
startActivityForResult
- 上記の 6 つの手順を実行します。
- 子アクティビティを閉じます。
- 親アクティビティのフラグメントが次のライフサイクルを持っていることがわかります。
onCreate
->onActivityResult
->onResume
私たちは期待していますonCreate
-> onResume
->onActivityResult