web-dev-qa-db-ja.com

バックスタックに既に存在する場合、開始する代わりにアクティビティを再開する

たくさんのステップを経て_Activity_1_がある

_Activity_2_ > _Activity_3_ ....いくつかの_Activity_n_に関連するいくつかのデータを変更し、_Activity_1_に関連して呼び出します

_Intent intent = new Intent(Activity_n.this, Activity_1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
_

コンテンツを更新します。しかし、後で、私が始めた_Activity_1_に戻ることができます。そこには古いデータがあります。

代わりに、上記のコードを使用して、最初の_Activity_1_のonResume()が呼び出されるようにします。または適切なフラグ

FLAG_ACTIVITY_CLEAR_TOP

a、B、C、Dのアクティビティで構成されるタスクを考えます。DがアクティビティBのコンポーネントに解決するインテントでstartActivity()を呼び出すと、CとDは終了し、Bは指定されたインテントを受信します。現在のスタック:A、B.

それはドキュメントが言っていることですが、私が得ているものではありません。

30
Archie.bpgc

この2行を追加して試すことができます

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Activity内のマニフェストファイルにこれを記述します

<activity
     Android:name=".SettingsActivity"
     Android:launchMode="singleInstance"
     Android:screenOrientation="portrait" >
</activity>

「singleTask」および「singleInstance」アクティビティは、タスクのみを開始できます。それらは常にアクティビティスタックのルートにあります。さらに、デバイスはアクティビティのインスタンスを一度に1つだけ保持できます。そのようなタスクは1つだけです。

SingleTaskまたはSingleInstanceを使用できます

"singleTask"-システムは、新しいタスクのルートでアクティビティを作成し、そのタスクにインテントをルーティングします。ただし、アクティビティのインスタンスが既に存在する場合、システムは、新しいインスタンスを作成するのではなく、onNewIntent()メソッドの呼び出しを通じてインテントを既存のインスタンスにルーティングします。

「singleInstance」-「singleTask」と同じですが、システムはインスタンスを保持するタスクに他のアクティビティを起動しません。アクティビティは常にそのタスクの唯一かつ唯一のメンバーです。

このリンクを参照してください http://developer.Android.com/guide/topics/manifest/activity-element.html

39
Nirali
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

アクセス: http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

14
Nhut Chau Minh

バックスタックが存在する場合はバックスタックからActivityを再開するか、存在しない場合は新しいものを作成します

Android:launchMode="singleTask"

この行をアプリのAndroidManifest.xmlに追加し、通常のIntentでアクティビティを開始します。

8
AhmedNTS