メディアプレーヤーを実行しているアプリがあり、アプリのホームアクティビティからアクティビティを再開したい。
StartActivity呼び出しに次のフラグを追加することで、これを正常に実行できます。
myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
これを見つけるのに長い時間がかかったので、これは物事を行うのに理想的な方法ではないのではないかと心配しています。あまり使っていないように思いました。
この方法を使用することに落とし穴はありますか?
質問が正しく理解されたことを確認するために、アクティビティスタックがA-> B-> Cのようなもので、CからスタックをクリアしてAに戻るとします。
これが必要な場合、それらのインテントフラグは正しく、 Android-developer docs のように、期待どおりに機能するはずです。
この質問はかなり古く、問題を解決して、火星に行ったり、その年に戻ったりするかもしれませんが、ここに来て説明を求めている人たちのために、明確にするために: =
設定されている場合、履歴スタックの最上位ですでに実行されているアクティビティは起動されません。
A-B-C-D
のバックスタックがあり、Activity A
でFLAG_ACTIVITY_CLEAR_TOP
を開始する別のインテントをこの時点で開始したとします。Androidは何をするかは、単にすべてをクリアすることです) Activity A
の上部のアクティビティは、BackStackが次のようになることを意味します-> A
(はい、その上にあるすべてのアクティビティをクリアしたため、これで完了です)。3番目のシナリオでは、同じBackStack A-B-C-D
から開始し、Activity D
でFLAG_ACTIVITY_SINGLE_TOP
からインテントを起動します。これで、BackStackは次のようになります-> A-B-C-D
(はい、BackStack FLAGが現在スタックの最上位にあり、ユーザー画面に表示されている場合、同じアクティビティの起動を禁止しているため、同じ順序のままです。
最後のシナリオでは、同じBackStack A-B-C-D
から開始し、インテント開始Activity D
を起動しますが、今回はFLAGSを使用しないため、BackStackは次のようになります-> A-B-C-D-D
。
とった?
FLAG_ACTIVITY_SINGLE_TOP
は、現在画面に表示されている同じアクティビティを開始していて、既存のアクティビティの新しいインスタンスの起動を禁止する場合にのみ役立ちます。