33

私は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の 'sを呼び出す必要があります。onResume()または適切なフラグ

FLAG_ACTIVITY_CLEAR_TOP

A、B、C、D のアクティビティで構成されるタスクを考えてみましょう。D がアクティビティ B のコンポーネントに解決されるインテントで startActivity() を呼び出す場合、C と D は終了し、B は指定されたインテントを受け取り、結果としてスタックは次のようになります: A, B.

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

4

3 に答える 3

49

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

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

これをアクティビティ内のマニフェスト ファイルに書き込みます

<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

于 2013-03-12T10:53:19.187 に答える
19
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

訪問: http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

于 2013-07-11T15:31:55.210 に答える
8

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

android:launchMode="singleTask"

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

于 2016-10-24T13:49:05.520 に答える