36

私はアンドロイド開発者ガイドとインターネットのいくつかの記事を読みましたsingleTask launchmode. 例を見てみましょう:

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

ActivityA -> ActivityB -> ActivityC

これが task1 の外観です。

次に、ユーザーがホーム ボタンをクリックして App2 の起動を選択すると、task1 がバックグラウンドになり、Android が新しいタスク task2 を開始し、ユーザーが何かを実行します。

ActivityD -> ActivityE

ActivityE、 start を試してみて、 launchmodeActivityBを持っているとしましょう。ActivityBsingleTask

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

ActivityA -> ActivityB

つまり:

  1. ActivityCが task1 から削除され、ActivityB が最上位の Activity になります。

  2. ユーザーが「戻る」ボタンをクリックするとActivityA、タスク 2 ではなくタスク 1 に戻りActivityEます。

私は正しいですか?

ありがとう

4

3 に答える 3

20

あなたは正しいように聞こえます。

テストしてみませんか。

起動モードの説明に役立つこのアプリもあります。

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

ここに画像の説明を入力

ソースはhttps://github.com/gnorsilva/Activities-LaunchMode-demoにあります

于 2012-07-26T12:01:50.707 に答える
10
The ActivityC will be removed from task1 and ActivityB becomes the top Activity.

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

ActivityC はremovedfrom になります。つまり、onDestroyActivityC のメソッドが呼び出されます。したがって、ユーザーがタスク 1 を再度起動すると、ActivityC ではなく ActivityB が表示されます。

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

Androidのドキュメントを見ると、

「「singleTask」アクティビティでは、他のアクティビティをそのタスクの一部にすることができます。これは常にそのタスクのルートにありますが、他のアクティビティ (必然的に「標準」アクティビティと「singleTop」アクティビティ) をそのタスクに起動できます。

これは、ホーム ボタンをクリックすると、単一タスク アクティビティ (この場合は ActivityB) の上にあるすべてのアクティビティがスタックから削除されることを意味します。

サンプルでは、​​以前に提供したアプリの「AndroidTest」プロジェクトを実行し、ログのホーム ボタンをクリックすると、2 番目のアクティビティが一時停止されていることがわかります。「最近のアクティビティ」から再度起動すると、アプリの」リストの 2 番目のアクティビティが破棄されます。

単一インスタンス アクティビティ (ActivityB) の上にあるアクティビティがバック スタックから削除されず、別のアプリケーションがこのアクティビティ (ActivityB) を要求するシナリオでは、アクティビティが表示されず、インテントがドロップされる場合があります。しかし、別の Task\App に移動する前に、ユーザーがホーム ボタンを押して BackStack 内の現在の Task\App を押す必要があるため、これが発生する可能性は非常に低くなります。

したがって、警告

他のモード (singleTask と singleInstance) は、ほとんどのアプリケーションには適していません。これは、ユーザーにとってなじみがなく、他のほとんどのアプリケーションとは大きく異なる対話モデルになるためです。

これで疑問が解決することを願っています。

于 2012-07-26T12:15:06.193 に答える