2012-07-26 15 views
19

アンドロイドの開発者ガイドとインターネットの記事を読んでいますが、私はまだsingleTasklaunchmodeについて混乱しています。例を挙げる:アンドロイドの起動モードについて「singleTask」

ユーザーはApp1を起動し、アンドロイドは新しいタスクを開始します。 App1が次の順序でアクティビティを作成するものとします。

ActivityA -> ActivityB -> ActivityC 

これはtask1の外観です。タスク2、ユーザーが何かを行います:

次に、ユーザは、タスク1がバックグラウンドで行くと、新しいタスクを開始アンドロイドので、自宅の湖底]をクリックし、App2のを起動することを選択した

ActivityD -> ActivityE 

は今、ActivityBを起動しようActivityE言うことができますActivityBの起動モードはsingleTaskです。

私が理解していることは、タスク1が再びフロントエンドに来て、タスク2がバックグラウンドになることです。そして、タスク1は次のようになりましたになります。

ActivityA -> ActivityB 

を意味し、どの:

  1. ActivityCがTASK1から削除され、ActivityBはトップの活動になります。ユーザーは今、「戻る」ボタンをクリックすると

  2. 、彼は私が右アムタスク2

ActivityEにタスク1の代わりに、背中のActivityAに来るのだろうか?

ありがとうございました

答えて

6

であるActivityCはタスク1とActivityBなっから削除されますが、アクティビティのトップへ

はいあなたは正しいです...

ActivityCがActivityCのすなわちonDestroyメソッドから削除されますが呼び出されます。したがって、ユーザーがタスク1を再び起動すると、ActivityCではなくActivityBが表示されます。

2つのタスク(プロジェクト)を作成し、同じ@SendSpaceをアップロードしました。やってみて...

あなたはアンドロイドdocumentationを見れば、それは

言います "『singleTask』アクティビティは、それがそのタスクのルートに常にです。他の活動は、そのタスクの一部にすることができますが、他の活動(必ずしも『』標準"singleTop"活動)をそのタスクに投入することができます。

つまり、ホームボタンをクリックすると、単一のタスクアクティビティ(ここではActivityB)上のすべてのアクティビティがスタックから削除されます。

「AndroidTest」プロジェクトを実行してログのホームボタンをクリックするだけで、サンプルアプリケーションの前に私があなたに与えたことは、2番目のアクティビティが一時停止していることがわかります。 "最近のアプリの"リストには2番目のアクティビティが破棄されています。

シングルインスタンスアクティビティ(ActivityB)を上回るアクティビティがバックスタックから削除されないシナリオで、別のアプリケーションがこのアクティビティ(ActivityB)を要求すると、そのアクティビティが表示されず、意図が破棄される可能性があります。しかし、ユーザーはホームボタンを押す必要があり、別のTask \ Appにナビゲートする前にBackStackの現在のTask \ Appを押す必要があるため、これは非常に少ない可能性があります。

したがって警告

他のモード - singleTaskとsingleInstanceは - それらがユーザになじみのない可能性がある他のほとんどのとは非常に異なる相互作用モデルをもたらすため、ほとんどのアプリケーションに適していませんアプリケーション。

これがあなたの疑問を解決することを願っています。 http://developer.android.com/guide/topics/manifest/activity-element.html#lmode それは言う:どのような混乱イム

+0

ありがとうございますが、この投稿の回答は私を混乱させる: http://stackoverflow.com/questions/3219726/android-singletask- or-singleinstance-launch-mode "singleTask"または "singleInstance"アクティビティのインスタンスは複数ありません。そのため、インスタンスはすべての新しいインテントを処理することが期待されます...しかし、 "singleTask"アクティビティは、スタックの上に他のアクティビティがあります。そうであれば、それは意図を処理する立場になく、意図は落とされます。 (意図が失われても、その到着によりタスクがフォアグラウンドに来て、そこに残ることになります) – cn1h

+1

"ホームボタンをクリックすると、単一のタスクアクティビティの上にあるアクティビティがすべて表示されますケースはActivityBです)がスタックから削除されます。ちょうどプロジェクトでこれが見つかった場合、これが当てはまります。ありがとう。 –

+0

"Sendspace"リンクが壊れています –

18

あなたは正しいと思います。

なぜテストしないのですか?

起動モードについて説明することができますこのアプリもあります:

https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode

enter image description here

ソースがhttps://github.com/gnorsilva/Activities-LaunchMode-demo

+0

おかげで、しかし、この文書では対照的に、「singleTask」と"singleInstance"アクティビティはタスクを開始するだけです。それらは常にアクティビティスタックのルートにあります。 – cn1h

+1

デモに間違いがあります。languch-modeが 'singleTask'である新しいアクティビティを開始すると、アクティビティは常に新しいタスクで作成されます。実際には、設定した新しいタスクでのみ作成されますアクティビティの** taskAffinity **。 – smileVann

+1

https://github.com/gnorsilva/Activities-LaunchMode-demo/issues/2 –

関連する問題