アンドロイドクロスプロセス(APP)通信(A) -のいくつかの例
のプロセスを横切るアンドロイド(APP)通信(B) -非AIDL
アンドロイドクロスプロセス(APP)通信(3) -プロキシ及びスタブモード
アンドロイドクロスプロセス(APP)通信(4 ) - AIDL
AIDLは何ですか
この一連の記事から、我々は知っています
Proxy和Stub模式
。実際には、跨进程通信
いわゆるAIDLを達成するために私たちを支援することですProxy和Stub模式
、私たちより良いパッケージを支援する编码
と译码
機能を。または底面transact
とonTransact
呼び出す方法。
小さな例
古典的なエコーのプログラムを作成します。プリントアウトして、サービスにサービスを単語を送信するためのプログラム。
STEP 1:AIDLインタフェースファイル(APPのサービスを提供)
他の人が使用できるようにするインターフェースをご利用のサービスプロバイダが、あなたはそれが明確にそれを達成するために、この時に指定する必要がないことを確認する必要があり。
- 新
com.example.aidlechoservice.aidl
パッケージ - 作成し、通常のファイルの名前を、
IEchoService.aidl
1 |
パッケージ com.example.aidlechoservice.aidl。 |
Eclipseを使用している場合は、この定義が作成した後、我々はわかります
gen/com.example.aidlechoservice.aidl/IEchoService.java
ファイルを
第二段階:(APPのサービスを提供する)サーバ側のスタブを実装
スーパーシンプルな、言葉だけ。
1 |
IEchoService.Stub mBinder = 新しい IEchoService.Stub(){ 公共の文字列のエコー(文字列INSTR)がスロー RemoteExceptionを { リターン"エコー" + INSTR + "に" + sdf.format(新しい日付())。 } }。 |
だから、全体的に、このコード
1 |
パブリック クラス EchoServiceは、 拡張 サービス { プライベート IEchoService.Stub mBinderを。民間のSimpleDateFormat自衛隊= 新しいてSimpleDateFormat("YYYY-MM-DD HH:MM:SS"); 公共のボイドのonCreate () { スーパー .onCreate(); mBinder = 新しい IEchoService.Stub(){ 公共の文字列のエコー(文字列INSTR)がスローのRemoteException { リターンを"エコー" + INSTR + "に" + sdf.format(新しい日付())。 } |
第三段階:APP AIDLの準備(APPサービスの呼び出し)
上記のサービスはまったく同じですと、それはそれ以外の場合は動作しません、まったく同じでなければなりません。
ステップ4:クライアントプロキシ(APPサービスの呼び出し)を実装
非常に単純な、単語を取得したり、
1 |
IEchoService mService = IEchoService.Stub.asInterface(バインダー) |
レイアウト
1 |
< のLinearLayout のxmlns:アンドロイド = "http://schemas.android.com/apk/res/android" のxmlns:ツール = "http://schemas.android.com/tools" のandroid:layout_width = ?大专栏アンドロイド跨进程(APP)通信(四) - AIDL 4; match_parent」アンドロイド:layout_height = "match_parent" アンドロイド:オリエンテーション = "垂直" > |
コード
1 |
public class MainActivity extends Activity { |