漠然とした質問で申し訳ないのですが、教えてください。
V2.3.3のソースしか見ていないのですが、他も一緒だろうと思っています。
Androidが起動するとき、app_processがZygoteとして常駐して親プロセスとなり、その起動中に
com.android.internal.os.ZygoteInitが起動されて、これはsystem_serverとして常駐し、system_serverは起動
時にzygoteをforkして作られるので、Zygoteの子プロセスとなる。と理解しました。
この後、いろいろなアプリが起動していくのですが、基本的に、この後のアプリ起動というのは、
AndroidManifest.xmlにBroadcastReceiverを書いているアプリが起動イベントを受けて、各自起きていると考え
ていいのでしょうか?
そうすると、起動イベント等のイベントをBroadcastしているのは、system_serverが行っていると考えていい
のでしょうか?
常駐しているサービスをkillしても、ゾンビのように起動してくるのは、何かのBroadcastイベントに反応し
て再起動してくるという感じなのでしょうか?ここらへんの仕組みに詳しい方、教えてください。
質問のきっかけは、最初に起動するアプリがどこかのrcに書かれているのかなと思って、起動関係のファイル
を見てみても、そんな感じのコードが見当たらないので、質問しました。
もう一つ、ついでに質問ですが、BroadcastReceiverから起動したサービスも起動の仕組みは通常のアプリ(イ
ンテント呼び出し)と同じで、
system_serverがアプリのuidを決めてZygoteの666ポートにデータを渡して、Zygoteがforkしてプロセスが起
動したのを確認したら、そのアプリに「あなたはこのコードを読み込むんですよ」と教えてあげて...という手
順でスタートすると考えていいのでしょうか。
誠に変な質問ですが、興味があるので教えてください。
よろしくお願いします。
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com
MORIHIRO様、ありがとうございます。
> DSAS開発者の部屋 / Android アプリケーションが起動するまでの流れ
> http://dsas.blog.klab.org/archives/52003951.html
このサイトは、とても参考になりました。
ありがとうございます。
killしても起動してくるところの仕組みというのも気になったので、そこらへんの仕組みも知りたいなと思っ
た次第です。
E-Mail: taro...@gmail.com
丁寧なご説明ありがとうございます。
> (各サービスのsystemReady()で監視) ActivityManager(正確にはActivityManagerService)の
> systemReadyから、システム常駐アプリを起動する。
ここら辺のソースを読んでみればいいのですね。
> AndroidManifest.xmlで"android:persistent=true"になっているものがシステム常駐アプリ。
> PhoneやSettings、IMEなどが該当。
persistent=trueというのがあるのですか。これも調べてみます。
たしかに、phoneやsettingはuidがapp_*ではなく、radioやsystemですね。
この後に、BroadcastIntentを投げるのですね。BroadcastReceiverというのもintentなんですね。
了解しました。
そうすると、killしてもどんどん起きてくるプロセスというのは、何らかのBroadcastIntentを受けて直ぐ起
きるように設計されているのですね。なるほど。
いろいろとありがとうございます。ここら辺のイメージって、1回自分でポーティングしてみないと、なかな
かピンと来ないですね。大阪で勉強会ないかなぁ・・・。
> E-Mail: taro...@gmail.com <mailto:taro...@gmail.com>
> (各サービスのsystemReady()で監視) ActivityManager(正確にはActivityManagerService)の
> systemReadyから、システム常駐アプリを起動する。
ここら辺のソースを読んでみればいいのですね。
> AndroidManifest.xmlで"android:persistent=true"になっているものがシステム常駐アプリ。
> PhoneやSettings、IMEなどが該当。persistent=trueというのがあるのですか。これも調べてみます。
たしかに、phoneやsettingはuidがapp_*ではなく、radioやsystemですね。
この後に、BroadcastIntentを投げるのですね。BroadcastReceiverというのもintentなんですね。
了解しました。そうすると、killしてもどんどん起きてくるプロセスというのは、何らかのBroadcastIntentを受けて直ぐ起
きるように設計されているのですね。なるほど。