Androidでは、アクティビティExampleActivityを定義しました。
アプリケーションを起動すると、このA-Activityのインスタンスが作成されました。たとえば、A
です。ユーザーがB-Activityの別のインスタンスA
のボタンをクリックすると、Bが作成されました。これで、タスクスタックはB-Aになり、Bが最上部になります。次に、ユーザーはCアクティビティの別のインスタンスであるBのボタンをクリックし、Cが作成されました。これで、タスクスタックはC-B-Aになり、Cが最上部になります。
ここで、ユーザーがCのボタンをクリックすると、アプリケーションがAをフォアグラウンドに持ってくる、つまりAをタスクスタックA-C-Bの最上位にしたいです。
どうすればそれを実現するコードを書くことができますか?
これを試すことができます FLAG_ACTIVITY_REORDER_TO_FRONT
(ドキュメントはあなたがしたいことを正確に説明しています)
これを行うための最良の方法は、Androidホーム画面の使用-アプリランチャーと同じ意図を使用することでした。
例えば:
Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
このようにして、パッケージ内のユーザーが最後に使用したアクティビティはすべて前面に戻ります。これは、サービスのPendingIntentを使用してユーザーをアプリに戻すのに役立ちます。
これを行う方法のコード例を次に示します。
Intent intent = getIntent(getApplicationContext(), A.class)
これにより、スタック上にアクティビティのインスタンスが1つだけ存在するようになります。
private static Intent getIntent(Context context, Class<?> cls) {
Intent intent = new Intent(context, cls);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
return intent;
}
FLAG_ACTIVITY_REORDER_TO_FRONT :Context.startActivity()に渡されたIntentで設定されている場合、このフラグは、既に実行されている場合、起動されたアクティビティをタスクの履歴スタックの先頭に移動します。
Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
Intent
フラグの組み合わせでうまくいくと思います。特に、 - Intent.FLAG_ACTIVITY_CLEAR_TOP
およびIntent.FLAG_ACTIVITY_NEW_TASK
。
startActvity
を呼び出す前に、これらのフラグをインテントに追加してください。
i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
注:ホームアクティビティの起動モードはsingle_taskである必要があります
一般に、この方法のアクティビティ管理はお勧めできません。 The Stackで2段階下のアクティビティを再アクティブ化する際の問題は、このアクティビティが強制終了された可能性が高いことです。アクティビティの状態を記憶し、startActivity ()
で起動することへの私のアドバイス
このページを見たことがあると思いますが、 このリンクは便利です
通知をクリックしたときにスタックの一番上にアクティビティを表示したい場合は、FLAG_ACTIVITY_REORDER_TO_FRONTを機能させるために次の操作が必要になる場合があります。
このための解決策は、通知がトリガーするブロードキャストアクションをリッスンするブロードキャストレシーバーを作成することでした。だから基本的に:
通知は、起動するアクティビティの名前を追加してブロードキャストアクションをトリガーします。
ブロードキャストレシーバーは、通知がクリックされたときにこれをキャッチし、FLAG_ACTIVITY_REORDER_TO_FRONTフラグを使用してそのアクティビティを起動するインテントを作成します
アクティビティはアクティビティスタックの最上部に移動され、重複はありません。