Aidl,Android平台的IPC方式之一,基於系統的Ibinder機制。
網上大多數例子都是在一個apk下來測試調用service,現在我在兩個project下面來調用。
一個是server project,一個是client project
首先我們建立的是server project,這裡面要實現aidl文件和一個service,activity只是用來啟動service的,當然,你也可以通過發廣播的形式來啟動service。
首先看IAidlService.aidl文件:
- package com.ds.server;
- interface IAidlService {
- int getType();
- }
這樣在eclipse裡面自動編譯的時候會在gen下面生成IAidlService.java文件(燈下我們的client project要用)。
然後新建一個service,這個service裡面has a IAidlService的stub對象,service具體代碼如下:
- package com.ds.server;
-
- import android.app.Service;
- import android.content.Intent;
- import android.os.IBinder;
- import android.os.RemoteException;
- import android.util.Log;
-
- public class AidlService extends Service {
-
- private IAidlService.Stub mBinder = new IAidlService.Stub() {
-
- @Override
- public int getType() throws RemoteException {
- // TODO Auto-generated method stub
- return 5;
- }
- };
-
- private void Log(String str) {
- Log.d("AidlService", "------ " + str + "------");
- }
-
- @Override
- public void onCreate() {
- Log("service create");
- }
-
- @Override
- public void onStart(Intent intent, int startId) {
- Log("service start id=" + startId);
- }
-
- @Override
- public IBinder onBind(Intent t) {
- Log("service on bind");
- return mBinder;
- }
-
- @Override
- public void onDestroy() {
- Log("service on destroy");
- super.onDestroy();
- }
-
- @Override
- public boolean onUnbind(Intent intent) {
- Log("service on unbind");
- return super.onUnbind(intent);
- }
-
- public void onRebind(Intent intent) {
- Log("service on rebind");
- super.onRebind(intent);
- }
-
- }