バインダーシリーズ2について語る

1: はじめに

Android システム全体では、すべてのアプリケーションは、 Android システムActivityの4 つ主要コンポーネントの 1 つ以上によって接続されていますServiceBroadcastContentProvider

これら 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 を使用できない可能性がありますか?

まず知ったのは、サービス

おすすめ

転載: blog.csdn.net/qq_18757557/article/details/113981980