1. ホーム
  2. android

[解決済み] onNewIntent() のライフサイクルと登録されたリスナー

2022-02-07 07:55:43

質問

singleTop Activityを使用して、検索ダイアログのインテントを onNewIntent() .

気づいたことは onPause() が呼び出される前に onNewIntent() を呼び出し、その後に onResume() . 視覚的に

  • 検索ダイアログが起動する
  • 検索インテントがアクティビティに発行される
  • onPause()
  • onNewIntent()
  • onResume()

問題は、リスナーを onResume() で削除されたものが onPause() の内部で必要とされています。 onNewIntent() を呼び出します。これらのリスナーを利用できるようにする標準的な方法はありますか?

どのように解決するのですか?

onNewIntent() は singleTop アクティビティのエントリポイントとして意図されており、スタックのどこか他の場所ですでに実行されているため onCreate() . アクティビティーのライフサイクルの観点からすると、このように onPause() の前に onNewIntent() . の内部でこれらのリスナーを使用しないようにアクティビティを書き直すことをお勧めします。 onNewIntent() . 例えば、ほとんどの場合、私の onNewIntent() メソッドは単純にこのような感じです。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // getIntent() should always return the most recent
    setIntent(intent);
}

すべてのセットアップロジックは onResume() を利用することで getIntent() .