Android の公式ドキュメントを読むと、Android システムはアクティビティをタスクごとに管理していることに気付きますが、バックスタックも使用してアクティビティ シーケンスを制御しています。またはバックスタックに対応する各タスク?
4 に答える
タスクは、アプリケーションのインスタンス化されたすべてのアクティビティの集まりです。
例えば:
アクティビティ A1、A2、A3 を持つアプリケーション A があり、A1 の後に A2 が開かれ、A2 の後に A3 が開かれた場合、アプリケーション A のタスクは次のようになります。
|A3|
|A2|
|A1|
ここで戻るボタンを押すと、A3 がポップオフされ、A2 がユーザーに表示されます。アプリケーション A のタスクは次のようになります。
|A2|
|A1|
すべてのアクティビティがなくなるまで押し戻すと、タスクは破棄され、次にアプリケーション A を起動したときに、Android はアプリケーション A のメイン アクティビティを最初のアクティビティとする新しいタスクを作成します。
では、もう一度 A1、A2、A3 を同じ順番で開いてみましょう。アプリケーション A のタスクは次のようになります。
|A3|
|A2|
|A1|
ここで、ホーム ボタンを押して、別のアプリであるアプリケーション B を起動するとします。これにより、アプリケーション A のタスク全体がバックグラウンドで保持され、アプリケーション B の新しいタスクが作成され、そのメイン アクティビティがインスタンス化されます。これで、次のような状況になりました。
Application A Application B
|A3| |B1|
|A2|
|A1|
アプリケーション B でさらにアクティビティを開くと、アプリケーション A と同様にタスクに追加されます。
Application A Application B
|A3| |B3|
|A2| |B2|
|A1| |B1|
ここで、アプリケーション A に戻ると、A のタスクがフォアグラウンドに移動し、B のタスクはバックグラウンドに保持されます。
同じアクティビティの複数のインスタンスが同じタスクに存在することもあります。この動作は制御できます。
システムのメモリが不足すると、バックグラウンドでアクティビティの強制終了が開始されます。タスクのすべてのアクティビティがなくなると、タスクも破棄されます。(更新: Dianne Hackborn によるこの回答によると、個々のアクティビティではなく、それらをホストするプロセス全体が破棄されます。ドキュメントはこの点で少し誤解を招く可能性があり、混乱はまだ解決されていません。より確実な情報が得られたら更新してください。)
要約すると、タスクは単にアプリケーションのアクティビティの集まりです。アプリのインスタンス化されたすべてのアクティビティの「スタック」または「バックスタック」を維持するために使用されます。アプリケーションのすべてのアクティビティがバックグラウンドにある場合、バックグラウンドで保持されます。これらのアクティビティの 1 つがフォアグラウンドに戻されると、タスクも戻され、現在のアクティビティのタスクがバックグラウンドにプッシュされます。システムがメモリを必要とする場合、バックグラウンド アクティビティとタスクが破棄される可能性があります。
公式ドキュメントにはさらに多くの情報が記載されているため、それらを読むことをお勧めします。
http://developer.android.com/guide/components/tasks-and-back-stack.html
アンドロイドの公式文書には、
タスクは、特定のジョブを実行するときにユーザーが操作するアクティビティの集まりです。アクティビティは、各アクティビティが開かれた順序でスタック (「バック スタック」) に配置されます。
私はそれがかなり混乱していることに同意します。ただし、ドキュメント全体を何度も読み直すと、明らかになります。
タスクは、バック スタックを使用してアクティビティを管理します。各タスクには、他の情報やデータに加えて、独自のバック スタックがあります。タスクは、バックスタックを使用してアクティビティを管理します。
私が間違っている場合は、私を修正してください。
何を目指しているのかよくわかりませんが、システム内のアクティビティはアクティビティ スタックとして管理されています。新しいアクティビティが開始されると、スタックの一番上に配置され、実行中のアクティビティになります。前のアクティビティは常にスタック内でその下に残り、新しいアクティビティが終了するまで再び前面に出ることはありません。