84

私は主な活動としてリストを持っているアプリを持っています、そしてあなたはそのアイテムの詳細なビューを開くアイテムをクリックすることができます。また、メインアクティビティと同様の検索アクティビティがあり、意図したとおりに機能します。

ただし、ユーザーが複数回検索できるように、この検索アクティビティにスタック上のインスタンスを1つだけにして、[戻る]をクリックすると、(前の検索結果に戻るのではなく)検索を開始する前の前のビューに戻るようにします。

singleTaskとsingelInstanceの両方の起動モードが私が望むことを実行しているように見えるので、この目的でどちらを使用する必要があるのか​​、そしてその理由がわかりません。

4

3 に答える 3

141

Android開発ガイドのアプリケーションの基礎ページから:

デフォルトでは、アプリケーション内のすべてのアクティビティは相互に親和性があります。つまり、すべてのアクティビティが同じタスクに属することが優先されます。

「singleInstance」アクティビティは、そのタスクの唯一のアクティビティとしてスタンドアロンです。別のアクティビティを開始すると、そのアクティビティは、起動モードに関係なく、FLAG_ACTIVITY_NEW_TASKが意図されているかのように、別のタスクで起動されます。他のすべての点で、「singleInstance」モードは「singleTask」と同じです。

上記のように、「singleTask」または「singleInstance」アクティビティのインスタンスは1つしか存在しないため、インスタンスはすべての新しいインテントを処理することが期待されます。「singleInstance」アクティビティは常にスタックの最上位にあるため(タスク内の唯一のアクティビティであるため)、常にインテントを処理する位置にあります。ただし、「singleTask」アクティビティには、スタック内でその上に他のアクティビティがある場合とない場合があります。含まれている場合は、インテントを処理する位置になく、インテントは削除されます。(インテントが削除されたとしても、その到着により、タスクがフォアグラウンドになり、そこに残ります。)

タスク内の4つのアクティビティ

どちらの起動モードでもアクティビティのインスタンスが複数存在することはないため、戻るボタンを押すと、ケースのアクティビティの既存のインスタンスに常に移動します。

重要な違いは、「singleTask」では、何かが選択されたときに起動される新しいアクティビティの新しいタスクを作成する必要がないことです。また、戻るボタンの新しいタスクを毎回削除する必要もありません。

アクティビティスタックはすべて1人のユーザーの「タスク」に関係し、singleInstanceが常にそれらを処理するのに役立つ複雑なインテント構造を持っているようには思えないため、singleTask起動モードを使用することをお勧めします。

これは、詳細と画像のクレジットについての優れたブログ投稿です:Androidアクティビティとタスクシリーズ–AndroidのUIコンポーネントモデルの紹介

于 2010-07-10T18:24:00.917 に答える
30

簡単な方法で-

singleTask:

システムは新しいタスクを作成し、新しいタスクのルートでアクティビティをインスタンス化します。ただし、アクティビティのインスタンスが別のタスクにすでに存在する場合、システムはonNewIntent()、新しいインスタンスを作成するのではなく、メソッドの呼び出しを介してインテントを既存のインスタンスにルーティングします。one instance一度に存在できるのはアクティビティのみです。

注:アクティビティは新しいタスクで開始されますが、[戻る]ボタンを押すとユーザーは前のアクティビティに戻ります。

singleInstance-

システムがインスタンスを保持しているタスクに他のアクティビティを起動しない"singleTask"ことを除いて、と同じです。アクティビティは常にそのタスクの唯一のメンバーです。これによって開始されたすべてのアクティビティは、別のタスクで開きます

于 2015-04-20T07:23:58.690 に答える
4

singleTaskアクティビティはタスクをsingleInstance開始することしかできません。それらは常にアクティビティスタックのルートにあります。さらに、デバイスは一度に1つのアクティビティのインスタンスのみを保持できます—そのようなタスクは1つだけです。
より多くのandroid:launchModeの場合。

于 2014-04-08T10:22:12.463 に答える