標籤:android
之前一章記錄了跨應用啟動service,之前學習過startService於bindService的區別及用法。
使用bindService方法,activity需要service返回一個Binder對象,那麼如果是兩個應用怎麼實現呢,這裡就涉及到了一個AIDL的概念。
AIDL (Android Interface Definition Language) 是一種IDL 語言,用於產生可以在Android裝置上兩個進程之間進行處理序間通訊(interprocess communication, IPC)的代碼。如果在一個進程中(例如Activity)要調用另一個進程中(例如Service)對象的操作,就可以使用AIDL產生可序列化的參數。
下面我們來看如何使用,
首先我們需要在service1項目中建立一個aidl介面。
我用的是eclipse,建立方法,包名右鍵–NEW–File–.aidl尾碼的名稱**,
aidl檔案中的自己輸入介面代碼。
建立完檔案後,clear工程,會在gen目錄下生產相應的java檔案。
第二步
進入service1項目中的service修改onBinder方法,代碼如下
@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return new IMyService.Stub() { @Override public void basicType() throws RemoteException { // TODO Auto-generated method stub } }; }
至此,一個簡單的aidl建立成功。
我們再回到service2項目中,增加按鈕事件監聽,
case R.id.button3: bindService(serviceIntent, this, Context.BIND_AUTO_CREATE); break; case R.id.button4: unbindService(this); break;
成功完成service2項目綁定service1項目中的service
Android -- 跨應用綁定service(AIDL)