1: はじめに
Android システム全体では、すべてのアプリケーションは、 Android システムActivity
の4 つの主要コンポーネントの 1 つ以上によって接続されていますService
。Broadcast
ContentProvider
これら 4 つのコンポーネントに関係するプロセス間通信の最下層はすべて、Binder IPC 通信メカニズムに依存します。たとえば、プロセス A のアクティビティがプロセス B のサービスと通信したい場合、Binder IPC に依存する必要があります。それだけでなく、
Android システム アーキテクチャ全体では、アクティビティが別のアクティビティを開始したり、アクティビティがブロードキャストを送信したりするなど、多数のバインダー メカニズムが IPC (プロセス間通信) ソリューションとして使用されます。 もちろん、その他の IPC メソッドもいくつかあります。として
Zygote 通信はソケットを使用します。デスクトップ上のアプリ アイコンをクリックして対応するアプリケーション (これまで開いたことがない) を起動すると、AMS が対応するアプリケーション プロセスがないことを検出すると、ソケット リクエストを開始します。
SystemServer プロセスでは、この時点で、SystemServer は Zygote プロセスとのソケット通信を使用して、対応するアプリケーション プロセスを作成します。デフォルトでは、このアプリケーションのパッケージ名がこのプロセスのプロセス名として使用され、pid は次のように指定されます。
生成するオペレーティング システム。それらの関係は次の図 1 のように表すことができます。Binder の仕組みをより深く理解するために、ソースコードを読み、図を描くことで全体のプロセスを整理します。
図1
(1) 質問 1: SystemService プロセスと Zygote プロセス間の通信に、有名なバインダーではなくソケットが使用されるのはなぜですか? この問題については、引き続き詳しく調査してみましょう。
私たちは高校生のときに生物の授業で「仮説演繹法」という方法論を習いましたが、これは、未知の問題についてよく分からないときや、どのように研究を始めればよいのかわからないときに、まず1つまたは複数の方法を想定するというものです。
結論を出し、結論から推理して、最終的に正解を導き出します。
仮説 1: SystemService プロセスと Zygote プロセス間の通信には、Binder よりも優れたパフォーマンスのソケット メカニズムが使用されていますか?
前回のバインダーシリーズ 1 の記事でいくつかのプロセス間通信方式を比較しましたが、送信パフォーマンスとセキュリティの点でソケットがバインダーよりもそれほど優れていないことがわかりました。
ビュー、ここでは説明しません。
仮説 2: 配列の問題により、Zygote では Binder を使用できない可能性がありますか?
まず知ったのは、サービス