参考地址:
http://blog.csdn.net/xiangzhihong8/article/details/61629899
http://blog.csdn.net/qq_30379689/article/details/72550701#面向对象和面向过程的区别

在Activity和Service进行通讯的时候,都会用到了Binder。

  • 当属于同个进程我们可以继承Binder然后在Activity中对Service进行操作。
  • 当不属于同个进程,那么要用到AIDL让系统给我们创建一个Binder,然后在Activity中对远端的Service进行操作。

系统给我们生成的Binder:

  • Stub类中有:接口方法的id,有该Binder的标识,有asInterface(IBinder)(让我们在Activity中获取实现了Binder的接口,接口的实现在Service里,同进程时候返回Stub否则返回Proxy),有onTransact()这个方法是在不同进程的时候让Proxy在Activity进行远端调用实现Activity操作Service。
  • Proxy类是代理,在Activity端,其中有:IBinder mRemote(这就是远端的Binder),两个接口的实现方法不过是代理最终还是要在远端的onTransact()中进行实际操作。

哪一端的Binder是副本,该端就可以被另一端进行操作,因为Binder本体在定义的时候可以操作本端的东西。所以可以在Activity端传入本端的Binder,让Service端对其进行操作称为Listener,可以用RemoteCallbackList这个容器来装Listener,防止Listener因为经历过序列化而产生的问题。

当Activity端向远端进行调用的时候,当前线程会挂起,当方法处理完毕才会唤醒。

如果一个AIDL就用一个Service太奢侈,所以可以使用Binder池的方式,建立一个AIDL其中的方法是返回IBinder,然后根据方法中传入的参数返回具体的AIDL。

更多相关文章

  1. 第14章 使用Kotlin 进行 Android(安卓)开发(1)
  2. Android(安卓)RecyclerView使用 及 滑动时加载图片优化方案
  3. android—OpenGL—GL10方法解析
  4. DialogFragment与Activity通信最佳实践
  5. 【Android】LitePal安装和使用
  6. Android(安卓)adb setuid提权漏洞的分析
  7. Android下调用jni时进行的转码操作实例
  8. Android启动流程以及分类
  9. android canvas 绘制bitmap并保存到本地

随机推荐

  1. Github 上Top1的Android(安卓)异步网络请
  2. Android的onCreateOptionsMenu()创建菜单
  3. Android的按键处理
  4. Android(安卓)MapView 申请apiKey
  5. Android深入浅出系列课程---Lesson8 Andr
  6. android的互联网开发
  7. Android中pm命令用法详解
  8. Android一键锁屏源码
  9. android shape的使用
  10. Android自带Music播放器更新播放时间和进