Androidを支える技術<II>の5章を読みました。

 

5章は難しい。この本全体が5章のために書かれているような印象を受けました。

 

以前の章で一応理解したつもりでもあちこち曖昧な部分も残っているため、それらを集約する5章になると非常に理解度が落ちてくるという感じです。

 

6章はAndroidの起動に関する話で今までの話とは独立しているので、一旦6章まで進んで本書を読み切ってしまおうと思っています。その後で本には書き切れなかったBinderの話がサポートページにはあるので読んだり、Androidのソースに目を通すとかをして全体的な理解度が上がったら5章に再チャレンジしたいと思います。

 

「Androidを支える技術<II>」の4章の後半を読みました。

 

ActivityManagerServiceが保持するActivityStackにActivityRecordが積まれる。ActivityRecordは各アプリのプロセスにあるアクティビティを指している。


Activityを復旧するのに必要な情報を収めたBundleはアプリのプロセスで作られBinderによってActivityRecordに保存される。


ActivityManagerServiceがアプリのプロセスがあるかないかを判断し必要ならアプリのプロセスを新規作成した後アプリのプロセスに処理を依頼するのをきっかけにActivityのライフサイクルが回る。

 

Activityは例外的にkillされることがあるのではなく裏に回ればkillされる方が当たり前と考えてプログラミングする必要がある。

 

「Androidを支える技術<II>」の4章を読みました。この本で4章は一番長いのでまずは前半について。

 

Androidは画面が狭くキーボードやマウスのような細かい操作ができないため、1画面は1つの役割だけにして画面遷移が多くなり、1画面が再利用の単位となる傾向がある。

 

複数のActivity(画面)が連携して1つの仕事をこなす単位をタスクという。ActivityStackはタスクのスタックであり、タスク内に複数のアクティビティがスタックされる。

 

ActivityStackの動作を通常と変えるにはマニフェストにlaunchModeを設定するか、startActivity()に渡すインテントに付加するインテントフラグがある。

 

Androidはシステムの維持に必要なプロセス(init, SystemServer, lmkd等)、現在画面を占有しているアプリ、ServiceやContentProviderを提供するプロセスは重要であると見なし、ActivityManagerServiceがスコアを下げるようにlmkdに依頼することでkillされにくくしている。