バックグラウンド
私が開発しているアプリには、スプラッシュ アクティビティとメイン アクティビティの少なくとも 2 つのアクティビティがあります。スプラッシュ アクティビティがメイン アクティビティを呼び出します。
場合によっては (ここでは、アプリの最初の実行のみであると仮定しましょう)、スプラッシュ アクティビティはブール値のエクストラを (intent.putExtra を使用して) インテントに true に追加し、メイン アクティビティは を使用してそれを読み取ります。
getIntent().getBooleanExtra(...,false);
問題
スプラッシュ アクティビティの後にメイン アクティビティを開いたときに、フラグを true として表示したいだけです。
これが、私が(onCreateで、フラグを取得した直後に)呼び出そうとした理由です:
getIntent().removeExtra(...);
別のアプローチ(このウェブサイトによると)は次のとおりです。
final Intent newIntent = new Intent();
setIntent(newIntent);
別のアプローチは次のとおりです。
getIntent().putExtra(..., false);
これらのいずれも機能しません。何らかの理由で、場合によっては、フラグがまだ true として返されます。
例として、ホーム ボタンを押して (メイン アクティビティがフォアグラウンドにある場合)、負荷の高いアプリ (カットザロープ ゲームやベンチマーク アプリなど) を起動し、次を使用してアプリに戻ることができます。ランチャー。
この場合 (常に発生するとは限りません)、スプラッシュ アクティビティは表示されませんが、代わりにメイン アクティビティが表示されます。フラグ自体はまだ true に設定されていますが、 onCreate を再度呼び出します。
質問
なぜ発生するのですか?インテントがリセットされないのはなぜですか?
これをエレガントな方法で克服する方法はありますか?
「savedInstanceState」が null でない場合、フラグを無視しても安全ですか?