Java 方法的参数是对象拷贝的,不能太大。可以将传入参数,声明为静态全局变量。


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;i< 30;i++){ sb.append(new String (stringMsg)); } System.out.println( "actor time start :" + System.currentTimeMillis()); binder.sendMsg("msg from actor : " + sb.toString()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } ------
public static BusCore coreBinder = new BusCore.Stub() {
@Override public void sendMsg(String msg) throws RemoteException { Log.d("", " RemoteBusCoreService msg:" + msg);
System.out.println("buscore time end :" + System.currentTimeMillis()); } };

对于远程服务,必须调用 bindService()方法,而不是 startService()方法。
今天刚好是在做框架性 实现方案测试时,稍微检测了下个,mark下。

更多相关文章

  1. Android之数据库Greedao的使用
  2. android通过webview+jquery设计界面
  3. Android(安卓)监听短信(同时监听广播和数据库)
  4. android ORM框架LitePal完全解析(crud)
  5. Android动态修改ListView中指定Item的组件属性
  6. Android客户端与PC服务端、android服务端通过WiFi通信
  7. android如何通过代码来获取每个应用访问过的ip和端口
  8. Android框架之MVP实践
  9. Android(安卓)Handler类 一看就懂

随机推荐

  1. 【Android Demo】悬浮窗体实现
  2. Android(安卓)在工作线程(非主线程)更改UI
  3. Android(安卓)Activity 生命周期
  4. Android(安卓)App程序结构
  5. Android网络开发详解
  6. android 程序检查当前应用是否在运行
  7. Android(安卓)WebView 禁止输入
  8. android日志工具LogCat的使用
  9. android下如何设置系统时间
  10. Android(安卓)系统设置默认launcher