前回の続き

今回は画面遷移を管理するTaskについての説明です。

Taskについて

先に言っておくとAsyncTaskなるクラスは、このTaskとは全くの別物です。AsyncTaskなどはProcess内で動くTask、いわばProcessの下僕でしかありません。ここでいうTaskは、Processよりも上の立場といえる存在です。

TaskはActivityを開いた順番、つまり画面遷移を管理しています。これをBack Stackといいます。Home画面からアプリを開いて画面遷移を行うと、Back StackにActivityが積まれていきます。Backボタンを押し続けてHome画面に戻るとBack StackはゼロになりTaskも消えます。

ここで誤解してはいけないのはTaskがActivityのメモリ管理を行なっているのではなく、開いた順番のみを管理しているということです。Activityのメモリ管理はProcessで行われます。

前回述べたようにアプリがバックグラウンドにあるとき、Processはいつメモリから消えるかわかりません。再びアプリをフォアグラウンドにし、Processが復活した時、画面遷移も復活できるのは、Back Stackを管理するTaskが生きているからです。

※ AndroidManifest.xmlの定義によっては、Processが復帰した後、常に最初の画面(Activity)を表示するようにもできます。今回はデフォルトのTaskの挙動を前提に話を進めます。また、Androidのドキュメントでもデフォルトの挙動のままを推奨しています。

アプリ、Task、Process

アプリとProcessの寿命は同じではありません。
前回の記事で述べたように、

  • アプリを見た目上終了してもProcessは生き残る
  • アプリがバックグラウンドになれば、システムの都合でProcessは消されることがある

からです。

TaskのBack Stackがゼロになるとき、ユーザーの目から見てアプリは終了したと言えるでしょう。Back Stackがゼロになるとタスクは消えますから、Taskとアプリの寿命は同じです。

ただし、アプリを終了してTaskが消えても、Processはまだ生き残っていることに注意してください・・・ってAndroidややこしいな、オイ!

次回はActivityの話もまじえてAndroidのアプリとは何かを説明したいと思います。

その4へ続く