基礎使用請移步 android studio 使用 aidl (一)
首先建立在server端建立兩個aidl文件
ITaskCallback.aidl 用於存放要回調client端的方法
// ITaskCallback.aidl package com.txy.umpay.aidl; // Declare any non-default types here with import statements interface ITaskCallback { void actionPerformed(int actionId); }
ITaskBinder.aidl 用於存放供給client端調用的方法
// ITaskBinder.aidl package com.txy.umpay.aidl; // Declare any non-default types here with import statements import com.txy.umpay.aidl.ITaskCallback;//一定要注意導包,不然Make就報錯了 interface ITaskBinder { boolean isTaskRunning(); void stopRunningTask(); void registerCallback(ITaskCallback cb); void unregisterCallback(ITaskCallback cb); }
接下來Build-->Make Module app就能生成好相應的java文件了
接下來 看下MAIDLService里面怎么寫的,貼一下關鍵代碼:
private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() { public void stopRunningTask() { } public boolean isTaskRunning() { return false; } public void registerCallback(ITaskCallback cb) { if (cb != null) { mCallbacks.register(cb); try { for (int i = 1; i < 6; i++) { cb.actionPerformed(i); Thread.sleep(5000); } } catch (Exception e) { e.printStackTrace(); } } } public void unregisterCallback(ITaskCallback cb) { if (cb != null) { mCallbacks.unregister(cb); } } }; final RemoteCallbackList<ITaskCallback> mCallbacks = new RemoteCallbackList<ITaskCallback>();
接下來把ITaskCallback.aidl和ITaskBinder.aidl 一起拷貝到客戶端,同樣Build-->Make Module app就能生成好相應的java文件了
在來看下客戶端是怎么調用的:(此處都是關鍵代碼,全的代碼都是android studio 使用 aidl (一)這里有)
綁定代碼:
//使用意圖對象綁定開啟服務 Intent intent = new Intent(); //在5.0及以上版本必須要加上這個 intent.setPackage("com.txy.umpay.aidl"); intent.setAction("com.txy.umpay.aidl.MAIDLService"); bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
調用代碼這個是在線程里面調用的:
try { if (service != null) { service.registerCallback(mCallback); } } catch (RemoteException e) { e.printStackTrace(); }
mCallback的代碼:
private ITaskCallback mCallback = new ITaskCallback.Stub() { public void actionPerformed(int id) { Log.e("123", "calculation" + id); } };
運行結果:

