Androidアプリの内部動作に関する情報(1)

iPhoneOS4.0のマルチタスク機能の発表を機に、Androidの内部動作を知りたいと思ったAkioHoshiに、Androidzaurusさんが情報を提供してくれました。なお、議論の続きはこちら。 http://togetter.com/li/13564
30
星 暁雄 (ITと人権) @AkioHoshi

RT @masuidrive: iPhoneのマルチタスクについて勘違いしてる人多いなぁ。Windowsと違って、全部がメモリに載ってる訳じゃなくて、アプリ単位のサスペンド/レジュームなんだけど。バックグラウンド動作と一緒にして考えると間違え。

2010-04-09 15:45:48
星 暁雄 (ITと人権) @AkioHoshi

拝読。Androidの場合はアプリがVM上で稼働するのでまた事情は違うのですね。 RT @andyma: [blog] iPhone OS4.0のマルチタスク・サポートを考える http://bit.ly/c3azN3

2010-04-09 16:11:58
Andy Matsubara(アンディ松原)@ナパヴァレー・ベスト・エデュケーター2023 @andyma

不勉強でAndroidをちゃんと調べてないのです。多分星さんの考えで正しいのでしょう RT: @AkioHoshi: 拝読。Androidの場合はアプリがVM上で稼働するのでまた事情は違うのですね。 RT @andyma: [blog] iPhone OS4.0のマルチタスku

2010-04-09 18:09:21
星 暁雄 (ITと人権) @AkioHoshi

@andyma iPhoneOSとAndroidのマルチタスク、比較記事を読んでみたいですね! が、NDAがあるからiPhoneOSの仕組みは「推定」するしかない? Androidは・・ちょっと資料探してみますね。

2010-04-09 18:37:42
星 暁雄 (ITと人権) @AkioHoshi

皆さまに質問:iPhoneOS4.0のマルチタスク化で、改めて #Android の動作モデルに興味が湧きました。Dalvik VMの各インスタンスがそれぞれLinuxプロセスとして動きずっとメモリ常駐、との理解で合ってますか? また良い資料があれば教えてくださいませんか?

2010-04-09 18:46:50
安藤化石 @androidzaurus

@AkioHoshi Google I/O 2008での Anatomy&Physiology of an Android http://bit.ly/6dDKXL と Dalvik VM Internals http://bit.ly/bPqWN が未だに一番詳しいです。

2010-04-09 19:12:10
星 暁雄 (ITと人権) @AkioHoshi

@androidzaurus ありがとうございます! 見てみます。

2010-04-09 19:17:05
安藤化石 @androidzaurus

AndroidのアプリケーションはDalvik VMのプロセス。1プロセス1アプリ。

2010-04-09 19:18:15
安藤化石 @androidzaurus

共有ライブラリは最初に専用プロセスで初期化して、全アプリから参照。それがZygote。

2010-04-09 19:19:06
安藤化石 @androidzaurus

プロセス間をつなぐのがBinder。IntentもこのBinderドライバが運ぶメッセージ。

2010-04-09 19:20:32
安藤化石 @androidzaurus

プロセス間通信では効率が良くなければ、ashmemを使う。Anonymous Shared Memory。

2010-04-09 19:21:08
安藤化石 @androidzaurus

Zygoteを作ることで、アプリのサイズも小さくなり、結果アプリを切り替える速度が速くなる。メモリとスピードを稼ぐ優れた工夫。

2010-04-09 19:30:15
安藤化石 @androidzaurus

Dalvik VMのプロセスごとに1アプリにすることで、メモリが足りなくなったときにプロセスごと殺すだけであっという間メモリが開放出来る。しかも、アプリ単位でのメモリリークを一掃できる。長時間、安定して動作するシステムになる。

2010-04-09 19:32:25
安藤化石 @androidzaurus

その代わり、アプリにはライフサイクルを順守するよう強制される。onCreate, onResume,...

2010-04-09 19:33:34
安藤化石 @androidzaurus

VMプロセスごとにアプリを分けると同時に、ユーザIDも変えている。それにより、アプリの扱えるファイルのパーミッションを制御できる。アプリ間でのファイルアクセスのセキュリティを確保している。

2010-04-09 19:36:27
安藤化石 @androidzaurus

プロセス、ファイルのパーミッション。このあたりはLinuxの特徴を上手く使っている。AndroidがLinuxを含めてフレームワークと言われる所以。

2010-04-09 19:37:20