zoukankan      html  css  js  c++  java
  • 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(三)权限验证

  • 相关阅读:
    开端
    springboot打包失败
    CONCAT_WS函数
    关于使用|作为分隔符
    JSONArray数组
    Math.ceil(double)向上取整
    $.unique(array)数组去重
    觉得没有问题,却始终没有按照预想的走的问题
    关于mouseover与mouseout以及mouseleave和mouseenter
    关于网页元素定义click事件,点击一次触发两次问题解决办法
  • 原文地址:https://www.cnblogs.com/androidxiaoyang/p/5918749.html
Copyright © 2011-2022 走看看