android studio 使用 aidl(二)異步回調


基礎使用請移步 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);
        }
    };

運行結果:

 

 

下一篇:android studio 使用 aidl(三)權限驗證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM