Android システム-プロセス-Binder2-Java レイヤー

導入:

Android システムの場合、完全なソフトウェア アーキテクチャは通常、Java 層からネイティブ層、そしてカーネル ドライバー層まで形成されます。Java 層から基礎となるドライバー層まで、Android システムの Binder IPC 通信メカニズムの全体的なアーキテクチャと原理は何ですか?

コンセプトと理解

バインダーの全体的なアーキテクチャ

図の赤は、Java 層全体のバインダー アーキテクチャの関連コンポーネントを表します。Binder
クラスはサーバー側を表し、BinderProxy クラスはクライアント側をコードします。図の青は、Java 層全体の
バインダー アーキテクチャに関連するコンポーネントを表します。ネイティブ層、
上位 Java 層のバインダー ロジックはネイティブ層アーキテクチャの基盤に基づいています 上記では、コア ロジックは処理のためにネイティブ層メソッドに渡されます。
Java層のフレームワーク層のServiceManagerクラスはNative層の機能に完全に対応しているわけではなく、BinderProxyを介してNative層に渡すことで最終的にフレームワーク層のServiceManagerクラスの実装が完了します。

バインダークラス図

画像の水色はインターフェイス、残りはクラスです。

ServiceManager : ServiceManagerProxy オブジェクトは getIServiceManager メソッドを通じて取得されます。ServiceManager の addService および getService の実際の作業は、ServiceManagerProxy の対応するメソッドによって処理されます。 ServiceManagerProxy : そのメンバー変数 mRemote は BinderProxy
オブジェクトを指し、ServiceManagerProxy の addService メソッドおよび getService メソッドは次のとおりです。最終的には mRemote Finish に引き渡されました。
ServiceManagerNative : そのメソッド asInterface() は ServiceManagerProxy オブジェクトを返し、ServiceManager は ServiceManagerNative クラスを使用して ServiceManagerProxy を検索します;
Binder : そのメンバー変数 mObject とメソッド execTransact() がネイティブ メソッドに使用されます
BinderInternal : 内部に処理用の GcWatcher クラスがあり、 Binder に関連するガベージ コレクションをデバッグします。
IBinder : インターフェイスの定数 FLAG_ONEWAY: バインダーを使用したクライアントとサーバー間の通信はブロックされていますが、FLAG_ONEWAY が設定されている場合、これは非ブロック呼び出しメソッドになり、クライアントはすぐに戻ることができ、サーバーはコールバック メソッドを使用してクライアントに条件を完了するように通知します。さらに、IBinder インターフェイスには内部インターフェイス DeathDecipient (死亡通知) があります。

バインダークラスの階層

カーネルからネイティブ、JNI、フレームワーク層まで、バインダー全体に関与するすべてのクラス

ソースコードウォーキング:

 登録サービス:

サービスを受ける:

おすすめ

転載: blog.csdn.net/haigand/article/details/132252101