web-dev-qa-db-ja.com

launchMode = "singleTask"の設定とアクティビティlaunchMode = "singleTop"の設定

非常に階層的なアプリがあり(アクティビティはリーグ>チーム>ポジション>プレイヤーに似ています)、ナビゲーションを適切に保ち、インスタンスの重複を防ぐために、各アクティビティsingleTopを作成しました。

現在、2番目のアプリを作成していますが、インスタンスの重複を防ぐために、アプリケーションをsingleTaskとして宣言することを提案しています。誰かが各アプローチの利点を説明できますか?

私の新しいアプリは3つのフラグメントを持つアクティビティであり、おそらく設定アクティビティとおそらくFAQを追加します。

編集:思ったように、singleTaskがアプリの重複インスタンスを防止していないことに気付きました。これを処理する正しい方法を探しています...

52
NSouth

SingleTopとsingleTaskの定義は少しずれていると思います。 SingleTopは、重複したインスタンスを生成する可能性があります。あなたの例を使用してみましょう、リーグ>チーム>ポジション>プレイヤー。プレイヤー画面にリーグ画面に移動するボタンがある場合、それはリーグ>チーム>ポジション>プレイヤー>リーグになります。

一方、singleTaskは、アクティビティのインスタンスが1つだけ存在することを保証します。

70
CChi

AndroidアクティビティlaunchMode

4つのモード...

「標準」「singleTop」「singleTask」「singleInstance」

デフォルトのモードは「標準」です。

モードは2つのグループに分類されます。 standardとsingleTopは一方の側にあり、singleTaskとsingleInstanceはもう一方の側にあります。

StandardとsingleTopの主な違いは標準です。標準アクティビティの新しいインテントが作成されるたびに、新しいインスタンスが作成されます。 singleTopの場合も、新しいインスタンスは作成されますが、アクティビティのインスタンスは既にスタックの最上位にあり、新しいインスタンスは作成されません。

実際、サーバーからアプリケーションをダウンロードして起動し、そこからアプリケーションを開くと、問題が発生します。アプリケーションを起動したら、ホームボタンを押します。次に、すべてのプログラムをクリックし、ホーム画面からアプリケーションのアイコンを選択します。その後、標準の場合は別のアクティビティが作成されますが、singleTopには新しいインスタンスは作成されません。

「singleTask」モードと「singleInstance」モードも、1つの点でのみ異なります。「singleTask」アクティビティは、他のアクティビティをタスクの一部にすることができます。これはアクティビティスタックのルートにありますが、他のアクティビティ(必要に応じて「標準」および「シングルトップ」アクティビティ)を同じタスクに起動できます。一方、「singleInstance」アクティビティは、他のアクティビティがそのタスクの一部になることを許可しません。タスク内の唯一のアクティビティです。別のアクティビティを開始する場合、FLAG_ACTIVITY_NEW_TASKがインテントにあるかのように、そのアクティビティは別のタスクに割り当てられます。

http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-Android.html

26
Selva

私はここで答えを見つけました: http://www.intridea.com/blog/2011/6/16/Android-understanding-activity-launchmode

"singleTop":

「標準」との違いは、アクティビティのインスタンスが現在のタスクの最上部に既に存在し、システムがこのアクティビティにインテントをルーティングする場合、新しいインスタンスは作成されず、onNewIntent()メソッドを起動するためです。新しいオブジェクト。 Twitter-oauth統合を例に取りましょう。

"singleTask":

新しいタスクは常に作成され、新しいインスタンスがルートインスタンスとしてタスクにプッシュされます。ただし、アクティビティインスタンスがタスクに存在する場合、システムはonNewIntent()メソッド呼び出しを介してそのアクティビティインスタンスにインテントをルーティングします。このモードでは、アクティビティインスタンスを同じタスクにプッシュできます。また、ユーザーがsingleTaskアクティビティから[戻る]キーをクリックすると、システムはユーザーを前のアクティビティに戻します。

15
M.Hefny

アクティビティ起動モードの理解 から:

標準(デフォルト):-アクティビティクラスの複数のインスタンスをインスタンス化し、同じタスクまたは異なるタスクに複数のインスタンスを追加できます。これは、ほとんどのアクティビティの共通モードです。

singleTop:-標準との違いは、アクティビティのインスタンスが現在のタスクの先頭に既に存在し、システムがインテントをこのアクティビティにルーティングする場合、onNewIntent()メソッドを起動するため、新しいインスタンスは作成されないことです。新しいオブジェクトを作成する代わりに。

singleTask:-新しいタスクが常に作成され、新しいインスタンスがルートとしてタスクにプッシュされます。ただし、アクティビティインスタンスがタスクに存在する場合、システムはonNewIntent()メソッド呼び出しを介してそのアクティビティインスタンスにインテントをルーティングします。このモードでは、アクティビティインスタンスを同じタスクにプッシュできます。このモードは、エントリポイントとして機能するアクティビティに役立ちます。

singleInstance:-アクティビティインスタンスをsingleInstanceの同じタスクにプッシュできることを除いて、singleTaskと同じです。したがって、起動モードのアクティビティは常に単一のアクティビティインスタンスタスクにあります。これは非常に特殊なモードであり、完全に1つのアクティビティとして実装されるアプリケーションでのみ使用する必要があります。

5
since k saji