一、android 中进程间通信常用的有以下几种机制

-----------------------------------------------------------------------------------------------------------------------

名称 优点 缺点 适用场景

-----------------------------------------------------------------------------------------------------------------------

Bundle 简单易用 只能传输Bundle支持的数据类型 四大组件间的进程通信

-----------------------------------------------------------------------------------------------------------------------

文件共享 简单易用 不适合高并发场景,并且无法做到 无并发访问情形,交换简

进程间及时通信数据实时性不高的场景

-----------------------------------------------------------------------------------------------------------------------

AIDL 功能强大,支持一对多并发 使用稍复杂,需要处理好线程同步 一对多通信且有RPC需求

通信,支持实时通信

-----------------------------------------------------------------------------------------------------------------------

Messenger 功能一般,支持一对多串行 不能很好处理高并发情形,不支 低并发的一对多即时通

通信,支持实时通信 RPC, 数据通过Message进行传输 ,无RPC需求或者无需

只能传输Bundle支持的数据 类型 返回结果的RPC需求

----------------------------------------------------------------------------------------------------------------------

ContentProvider在数据源访问页面功能强大, 可以理解为受约束的AIDL, 一对多的进程间的数据共享

支持一对多并发数据共享, 主要提供数据源的CRUD操作

可通过Call方法扩展其他操作

----------------------------------------------------------------------------------------------------------------------

Socket 功能强大,可以通过网络数 实现细节有点繁琐 网络数据交换

字传输节流,支持一对多 ,不支持直接的RPC

并发实时通信

---------------------------------------------------------------------------------------------------------------------


二、 Bundle

Bundle实现了Parcelable接口,所以可以方便的在不同进程间传输,当在一个进程中启动了另外一个进程的Activity、Service、Receiver,可以在Bundle中附加需要传输给远程进程的信息并通过Intent发送出去。


三、文件共享

Activity1:-----------------privatevoidpersistToFile(){newThread(newRunnable(){@Overridepublicvoidrun(){Useruser=newUser(1,"helloworld",false);Filedir=newFile(MyConstants.CHAPTER_2_PATH);if(!dir.exists()){dir.mkdirs();}FilecachedFile=newFile(MyConstants.CACHE_FILE_PATH);ObjectOutputStreamobjectOutputStream=null;try{objectOutputStream=newObjectOutputStream(newFileOutputStream(cachedFile));objectOutputStream.writeObject(user);//利用Serializable序列化的过程Log.d(TAG,"persistuser:"+user);}catch(IOExceptione){e.printStackTrace();}finally{MyUtils.close(objectOutputStream);}}}).start();}Activity2:----------------privatevoidrecoverFromFile(){newThread(newRunnable(){@Overridepublicvoidrun(){Useruser=null;FilecachedFile=newFile(MyConstants.CACHE_FILE_PATH);if(cachedFile.exists()){//对MainActivity中user对象反序列化的过程(Serializable),//得到的是一个新的对象ObjectInputStreamobjectInputStream=null;try{objectInputStream=newObjectInputStream(newFileInputStream(cachedFile));user=(User)objectInputStream.readObject();Log.d(TAG,"recoveruser:"+user);}catch(IOExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}finally{MyUtils.close(objectInputStream);}}}}).start();}

更多相关文章

  1. android:process=":remote"
  2. Android(安卓)使用非阻塞的方式读写串口
  3. 《Android和PHP开发最佳实践》一2.2 Android系统框架
  4. Android中线程的应用
  5. Android的ps命令介绍和技巧
  6. 守护进程通信之Socket
  7. 【Android】MVC模式在Android系统中的应用
  8. Android进程 Handler Message Looper
  9. 面向UDP的Android——PC双向通信(二):实现Android客户端和PC服务器

随机推荐

  1. Android(安卓)Testing Fundamentals 2, r
  2. 中:Android(安卓)startActivity原理分析(
  3. android工程混淆和反编译
  4. 【Android】FragmentTabHost实现问题记录
  5. Android绘图之Shader
  6. 【Android】下载Android源码的简明步骤
  7. Android(安卓)数据结构之 二叉树
  8. 一个基本Android工程的搭建
  9. Android设置theme中的坑
  10. Android(安卓)的永久登陆 与注销登陆