10周年のSPコンテンツ!

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

iPhoneOS4.0のマルチタスク機能の発表を機に、Androidの内部動作を知りたいと思ったAkioHoshiに、Androidzaurusさんが情報を提供してくれました。なお、議論の続きはこちら。 http://togetter.com/li/13564
30
星 暁雄 @AkioHoshi
RT @masuidrive: iPhoneのマルチタスクについて勘違いしてる人多いなぁ。Windowsと違って、全部がメモリに載ってる訳じゃなくて、アプリ単位のサスペンド/レジュームなんだけど。バックグラウンド動作と一緒にして考えると間違え。
Andy Matsubara @andyma
[blog] iPhone OS4.0のマルチタスク・サポートを考える http://bit.ly/c3azN3
星 暁雄 @AkioHoshi
拝読。Androidの場合はアプリがVM上で稼働するのでまた事情は違うのですね。 RT @andyma: [blog] iPhone OS4.0のマルチタスク・サポートを考える http://bit.ly/c3azN3
Andy Matsubara @andyma
不勉強でAndroidをちゃんと調べてないのです。多分星さんの考えで正しいのでしょう RT: @AkioHoshi: 拝読。Androidの場合はアプリがVM上で稼働するのでまた事情は違うのですね。 RT @andyma: [blog] iPhone OS4.0のマルチタスku
星 暁雄 @AkioHoshi
@andyma iPhoneOSとAndroidのマルチタスク、比較記事を読んでみたいですね! が、NDAがあるからiPhoneOSの仕組みは「推定」するしかない? Androidは・・ちょっと資料探してみますね。
星 暁雄 @AkioHoshi
皆さまに質問:iPhoneOS4.0のマルチタスク化で、改めて #Android の動作モデルに興味が湧きました。Dalvik VMの各インスタンスがそれぞれLinuxプロセスとして動きずっとメモリ常駐、との理解で合ってますか? また良い資料があれば教えてくださいませんか?
安藤文鎮 @androidzaurus
@AkioHoshi Google I/O 2008での Anatomy&Physiology of an Android http://bit.ly/6dDKXL と Dalvik VM Internals http://bit.ly/bPqWN が未だに一番詳しいです。
星 暁雄 @AkioHoshi
@androidzaurus ありがとうございます! 見てみます。
安藤文鎮 @androidzaurus
AndroidのアプリケーションはDalvik VMのプロセス。1プロセス1アプリ。
安藤文鎮 @androidzaurus
共有ライブラリは最初に専用プロセスで初期化して、全アプリから参照。それがZygote。
安藤文鎮 @androidzaurus
プロセス間をつなぐのがBinder。IntentもこのBinderドライバが運ぶメッセージ。
安藤文鎮 @androidzaurus
プロセス間通信では効率が良くなければ、ashmemを使う。Anonymous Shared Memory。
安藤文鎮 @androidzaurus
Zygoteを作ることで、アプリのサイズも小さくなり、結果アプリを切り替える速度が速くなる。メモリとスピードを稼ぐ優れた工夫。
安藤文鎮 @androidzaurus
Dalvik VMのプロセスごとに1アプリにすることで、メモリが足りなくなったときにプロセスごと殺すだけであっという間メモリが開放出来る。しかも、アプリ単位でのメモリリークを一掃できる。長時間、安定して動作するシステムになる。
安藤文鎮 @androidzaurus
その代わり、アプリにはライフサイクルを順守するよう強制される。onCreate, onResume,...
安藤文鎮 @androidzaurus
VMプロセスごとにアプリを分けると同時に、ユーザIDも変えている。それにより、アプリの扱えるファイルのパーミッションを制御できる。アプリ間でのファイルアクセスのセキュリティを確保している。
安藤文鎮 @androidzaurus
プロセス、ファイルのパーミッション。このあたりはLinuxの特徴を上手く使っている。AndroidがLinuxを含めてフレームワークと言われる所以。

コメント

星 暁雄 @AkioHoshi 2010年4月11日
続きのURLを間違えていたので前のコメントを削除。正しくはこちら。 http://togetter.com/li/13564
ログインして広告を非表示にする
ログインして広告を非表示にする