目录

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

什么是Proxy和Stub模式

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

Android跨进程通信之Proxy与Stub(三)_第1张图片非AIDL

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

Android跨进程通信之Proxy与Stub(三)_第2张图片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的Java源代码并在Eclipse中关联查看的最新方法
  3. Android webkit image的加载过程解析(二)
  4. 在代码中实现android:tint效果
  5. 【Android 开发】: Android 消息处理机制之二: Message 中 obtai
  6. pandaboard ES学习之旅——4 Android源代码下载与编译
  7. Android跨进程通信之AIDL

随机推荐

  1. android Contacts应用中不容易理解的点
  2. Android(安卓)学习笔记-2010年10月
  3. android通知栏Notification用法
  4. Android笔记 SystemUI
  5. Android(安卓)简单模仿AsyncHttpClient
  6. android 数据库操作
  7. Android(安卓)保存浏览记录 SharedPreToo
  8. Android获取MAC地址
  9. Android_开发 Android传感器(加速度传感器
  10. 【Android】ImageMap,图片地图