7

アプリケーションで開始するすべての単一のインスタンスを保持したいと考えてActivityいます。launchModesingleTaskはオプションでしたが、1 つのみで機能していますActivity

私が欲しい

  • Activityインスタンスがなく、呼び出された場合に開始します。
  • その の他のインスタンスがActivity既に存在する場合、そのインスタンスはその の新しいインスタンスを作成せずに前面に表示されますActivity
  • このプロパティは、複数の に適用されますActivity
  • NoActivityは、常に履歴スタックの一番上にあることを保証しません。

今までの私の仕事:

私のケースには当てはまらない提案がたくさんあったので、他の人が同じ提案をしないように指摘したいと思います。

  • を に設定しましたlaunchModeが、これは が履歴スタックの一番上にあるsingleTop場合にのみ機能します。onNewIntent()は、履歴スタックの一番上にある場合にのみ呼び出されます。私の場合、スタック内の任意の位置にある可能性があります。したがって、これは機能していません。ActivityActivityActivity
4

3 に答える 3

23

を起動するときは、次のActivityようにします。

Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

このインスタンスがActivity既に存在する場合は、前面に移動されます。インスタンスが存在しない場合は、新しいインスタンスが作成されます。

于 2016-04-25T13:08:09.600 に答える
0

singleTop代わりに起動モードを使用します ( docs ) : 呼び出し元のタスクのスタックの一番上に同じタイプのアクティビティ インスタンスが既に存在する場合、新しいアクティビティは作成されません。代わりに、既存のアクティビティ インスタンスにインテントが送信されます。 onNewIntent() メソッド。

起動モードの詳細については、この記事も参照してください。

于 2016-04-25T12:24:23.710 に答える