2

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 メモリ不足の状態を生成するには、次の手順を実行する必要があります。

  1. ホームを押して、アプリをバックスタックに入れます。
  2. メモリを大量に消費するアプリを起動します。
  3. ホームを押します。
  4. 他のアプリについて、手順 2 ~ 3 を 5 回繰り返します。
  5. 最初のアプリを再度起動します。
  6. savedInstanceStatenull ではないことがわかります。ただし、同時に、現在実行中のApplicationインスタンスが最初に起動したインスタンスとは異なることに気付くでしょう。

メモリ不足の状態から復元するときに静的メンバーが初期化されないことに加えて、いくつかの奇妙なものにも遭遇します

  1. 経由で親アクティビティから子アクティビティを起動しますstartActivityForResult
  2. 上記の 6 つの手順を実行します。
  3. 子アクティビティを閉じます。
  4. 親アクティビティのフラグメントが次のライフサイクルを持っていることがわかります。onCreate-> onActivityResult->onResume

私たちは期待していますonCreate-> onResume->onActivityResult

4

2 に答える 2

3

明らかな観測結果の 1 つは、長押ししたホームからの復元アクティビティでは、アプリケーションも破棄して再作成することです。

いいえ、それはしません。

プロセスが終了した場合、新しいプロセスが作成されると (アプリの起動方法に関係なく)、Applicationその新しいプロセスの一部として新しいプロセスが作成されます。これは、「長押ししたホームからのアクティビティの復元」とは直接関係ありません。

アクティビティまたはフラグメントで両方のケースをどのように区別できますか?

理想的には、彼らは気にしません。彼らが気にする唯一の理由は、初期化されているかどうかにかかわらず、静的データメンバーに依存しているかどうかです。その場合、それらの静的データメンバーの使用方法に問題があります。

私の以前の主張は、savedInstanceStatenull- であり、正しくありません。そのため、お詫び申し上げます。の主なシナリオsavedInstanceStateは、構成の変更です。ただし、最近のタスクリストからの起動 (「長押ししたホームからのアクティビティの復元」) も、最後に保存されたインスタンスの状態で渡されることを忘れていました。ホーム画面のランチャーなど、他の方法で起動するとnullsavedInstanceState.

your-process-was-terminated と他のシナリオを絶対に区別する必要がある場合は、いくつかの静的データ メンバーをチェックして、初期化されているかどうかを確認してください。

于 2013-07-18T18:21:47.003 に答える