1. ホーム
  2. android

[解決済み] Androidの起動モードはsingleTaskかsingleInstanceか?[クローズド]

2023-05-21 04:51:09

質問

メイン アクティビティとしてリストがあり、アイテムをクリックするとそのアイテムの詳細ビューが表示されるアプリがあります。また、メインのアクティビティと同様の検索アクティビティがあり、意図したとおりに動作します。

しかし、この検索アクティビティはスタック上に1つのインスタンスしか持たないようにしたいので、ユーザーは何度も検索でき、戻るをクリックすると、検索を始める前にいたビューに戻ります (以前の検索結果に戻るのではありません)。

singleTask と singelInstance の両方の起動モードは、私が望むことを行うように思われるので、この目的のためにどちらを使用すべきか、なぜ使用すべきかがわかりません。

どのように解決するのですか?

からの アプリケーションの基礎知識 のページを参照してください。

デフォルトでは、アプリケーションのすべてのアクティビティは アプリケーションのすべてのアクティビティは互いに親和性を持っています。 つまり、すべてのアクティビティが同じアクティビティに属することを つまり、すべてのアクティビティが同じ タスクに属することが望ましいということです。

シングルインスタンス(singleInstance")アクティビティは そのタスクにおける唯一のアクティビティとして単独で タスクの唯一のアクティビティとして単独で動作します。別のアクティビティを開始した場合、そのアクティビティは そのアクティビティは、そのアクティビティに関係なく、別のタスクに起動されます。 そのアクティビティは、その起動モードに関係なく、別のタスクに起動されます。 起動モードに関係なく、別のタスクに起動される。 FLAG_ACTIVITY_NEW_TASKがインテントにあったかのように。 が意図されているかのように。他のすべての点で singleInstance"モードは singleTask"と同じです。

上で述べたように、"singleTask のインスタンスが複数存在することはありません。 のインスタンスが 1 つ以上存在することはありません。 アクティビティの複数のインスタンスが存在することはなく、そのため、その インスタンスは、すべての新しい インテントを処理することが期待されます。シングルインスタンス活動 は、常にスタックの最上位にあります。 (タスクの唯一のアクティビティであるため タスクの唯一のアクティビティであるため)、常にインテントを処理する位置にあります。 インテントを処理する位置にあります。しかし アクティビティは、その上に他のアクティビティがある場合とない場合があります。 は、スタック内でその上に他のアクティビティがあってもなくてもかまいません。 スタック内に他のアクティビティがある場合もあります。もしそうであれば、それはインテントを処理する位置にありません。 インテントを処理する位置になく、インテントが削除されます。 インテントが削除されます。(インテントがドロップされても インテントがドロップされたとしても、その到着によって タスクがフォアグラウンドになり、そこに留まることになる)。 フォアグラウンドになり、そこにとどまることになります)。

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

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

Activity スタックはすべて 1 人のユーザーのタスクに関連し、singleInstance が常にそれらを処理するのに有益であるような複雑な Intent 構造を持っていないようなので、singleTask 起動モードを使用することを提案したいと思います。

より詳細な情報のための良いブログ記事と、画像のクレジットを紹介します。 Android Activities and Tasks series - Android の UI コンポーネント モデル入門