目录

Android跨进程通信之小例子(一)
Android跨进程通信之非AIDL(二)
Android跨进程通信之Proxy与Stub(三)
Android跨进程通信之AIDL(四)

什么是Proxy和Stub模式

在Android跨进程通信之非AIDL(二)这篇文章里,通信的过程大概就是这样的

非AIDL

其中transactonTransact里面都有code的参数,呼叫方transact的时候给定一个code称为编码的过程。而onTransact取出code处理对应事件称为译码的过程。
我们可以通过在呼叫方这边添加一个Proxy对象,完成编码过程;在被呼叫方添加Stub对象,完成解码的过程。

proxy-stub

使用Proxy和Stub改造之前的代码

BinderProxy代码

public class BinderProxy {    private IBinder             mBinder;    private Parcel              data    = Parcel.obtain();    private Parcel              reply   = Parcel.obtain();    private SimpleDateFormat    sdf     = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        public BinderProxy(IBinder binder) {        if (binder == null) {            throw new RuntimeException("Binder shoule not be null");        }        this.mBinder = binder;    }        public void play() throws RemoteException {        data.writeString("Activity request to play music at " + sdf.format(new Date()));        mBinder.transact(0, data, reply, 0);        Log.i("TAG", reply.readString());    }        public void pause() throws RemoteException {        data.writeString("Activity request to pause music at " + sdf.format(new Date()));        mBinder.transact(1, data, reply, 0);        Log.i("TAG", reply.readString());    }}

我们可以直接通过这个代理类去完成编码并且发送消息的工作,并且把playpause方法接口暴露即可。

调用代码

对于Android跨进程(APP)通信(二) - 非AIDL这篇文章里的代码我们只需做一点修改

@Overridepublic void onServiceConnected(ComponentName name,IBinder service) {    mBinderProxy = new BinderProxy(service);}
public void play(View v) {        if (!isBinded()) {            return;        }        try {            mBinderProxy.play();        } catch (RemoteException e) {            e.printStackTrace();        }    }        public void pause(View v) {        try {            mBinderProxy.pause();        } catch (RemoteException e) {            e.printStackTrace();        }    }

更多相关文章

  1. android编译过程详解(一)
  2. Android(安卓)webkit image的加载过程解析(二)
  3. Android(安卓)核心分析 之八------Android(安卓)启动过程详解
  4. Android(安卓)核心分析 之八------Android(安卓)启动过程详解
  5. 自定义tabhost实现
  6. Android跨进程通信之AIDL
  7. Android编译过程详解(三)
  8. Android之使用ContentResolver对通信录中的数据进行简单操作
  9. Android笔记(28)MVVM架构过程

随机推荐

  1. android 通过lint以及android-resource-r
  2. Android学习记录(6)—将java中的多线程下载
  3. Android(安卓)setting中添加桌面循环滑动
  4. 尝试用Android获取IMEI,折腾的一天,结果只
  5. Android(安卓)仿今日头条频道管理(下)(GridV
  6. Android对移动计算的影响及产业变革
  7. 解剖Android(安卓)USB MTP 的激活流程
  8. Android(安卓)修图(换证件照背景,污点修复)
  9. MDCC印象之三:Android热的背后
  10. 腾讯T3大牛带你了解 2019 Android开发趋