Androidプロセス間通信(IPC)

1862 ワード

マルチプロセスの設定方法
AndroidManifest.xmlでandroid:process=":remote"(1)android:process=":remote"を構成すると、アプリケーションで新しいプロセスが自動的に作成されることを示します.(2)android:process="remote"は、グローバルプロセスを作成し、異なるアプリケーションがそのプロセスを共有する.
一般的なプロセス間通信方式
BundleはIntentを通じてデータ、ファイル共有、ContentProvider、BinderベースのAIDL、Messenger、Socketを伝達します.
一、Activity
Intentを介してプロセス間で他のプロセスページを起動し、Bundleを介して値を転送します.
Intent intent = getPackageManger().getLaunchIntentForPackage("  ");

二、Content Provider
Androidアプリケーションは、ファイルまたはSqlLiteデータベースを使用してデータを格納できます.Content Providerは、複数のアプリケーション間でデータを共有する方法(プロセス間でデータを共有する方法)を提供します.アプリケーションはContent Providerを使用して、削除・変更の作業を完了できます.
三、Broadcast
ブロードキャストは、プロセス間で受動的に通信する方法です.あるプログラムがシステムにブロードキャストを送信すると、他のアプリケーションはブロードキャストデータを受動的に受信するしかない.
四、サービス
(一)AIDL
AIDLはC/Sアーキテクチャを採用し、サービス側とクライアントに分けられる.
サービス側サービス側は、接続するプロセスです.彼はクライアントにサービスを提供して、このサービスの中でクライアントの接続要求を傍受して、それからAIDLインタフェースファイルを作成して、中は実現する方法で、この方法がクライアントに露出していることに注意します.最後にこのAIDLインタフェースをサービスで実現すればよい(ここではインタフェースの具体的な実装である).サービス側の職責は、接続と自身を提供することです.
クライアントクライアントはまずサービス側のサービスをバインドする必要があり、バインドに成功した後、サービス側から返されるBinderオブジェクトをAIDLインタフェースが属するタイプに変換し、最後にAIDLを呼び出す方法でよい.クライアントは接続と呼び出しを担当します.
AIDLがサポートするデータ型は
  • 基本データ型(int,long,char,boolean,double,float,byte,short)
  • StringおよびCharSequence
  • List:ArrayListのみをサポートし、その中の各要素はAIDLによって
  • をサポートしなければならない.
  • Map:HashMapのみをサポートします.同様に、keyとvalue
  • を含む中の要素はAIDLにサポートされなければなりません.
  • Parcelable:Parcelableインタフェースを実装すべてのオブジェクト
  • AIDL:すべてのAIDLインタフェース自体もAIDLファイルで
  • を使用することができる.
    (二)Messenger
    Messengerの本質もAIDLであり,パッケージ化されているだけである.MessengerがClient側の要求を処理するのは単一スレッドであり、AIDLはマルチスレッドである.Clientの方法では,AIDLを用いて戻り値を取得するのは同期であり,Messengerは非同期である.
    (三)Socket
    https://blog.csdn.net/hzw2017/article/details/81210979