搜索
首页 电脑/网络 互联网

android进程间通信方式为什么要用AIDL不用广播?

全部回答

2017-10-17

222 0
    1。bus工程实现通过service实现aidl实体类?2。actor工程通过发起bindservice,根据action去启动远程(跨进程的)bus上的aidl。 那么问题来了,我们知道,linux系统进程间通信,各个进程间资源是隔离的,两个进程间需要通信,就要把msg转换成底层os系统能够识别的数据单元,在Android里面的方案是aidl parcelbal的序列化。
     为了模拟和测试aidl的性能问题,我做了个简单实验,在Android中,进程间通信通过binder实现,bind是通信的数据载体,当序列化后的数据单元过大时,就会出问题,报出android。
  os。TransactionTooLargeException。 http://developer。  android。com/reference/android/os/TransactionTooLargeException。
  html 官方文档里有说明,最大通常限制为1M。也就是说如果大于1M数据的话,就应该分开传。理论上说,应该都是对象和字符串类型的数据为主,只要不是大图片实体等问题,一般应该够用。  我这边做了一个测试,序列化传送了450k的String被序列化?后的数据,耗时使用了33秒的时间。
  ?try?{StringBuilder?sb?=?new?StringBuilder();for(int?i?=?0;ipublic?static?BusCore?coreBinder?=?new?BusCore。
    Stub()?{ @Overridepublic?void?sendMsg(String?msg)?throws?RemoteException?{Log。d("",?"?RemoteBusCoreService?msg:"? ?msg); System。
  out。    println("buscore?time?end?:"? ?System。currentTimeMillis());}}; 对于远程服务,必须调用?bindService()方法,而不是?startService()方法。
   今天刚好是在做框架性?实现方案测试时,稍微检测了下个,mark下。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
互联网
硬件
电脑装机
程序设计
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
互联网
互联网
QQ
网站推荐
上网帮助
举报
举报原因(必选):
取消确定举报