一、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 进程通信
  2. 一个android通信录的源代码
  3. Android在内存中读取数据
  4. android 进程内存分析
  5. android 列表 数据显示总结
  6. Android HttpClient网络通信
  7. Android 数据库Sqlite的使用(1)
  8. Android夸进程通信机制九:AIDL深入了解

随机推荐

  1. Android开发提高篇之“多方向”抽屉
  2. Android(安卓)NDK r8e __gmsl 错误
  3. android完全自绘Widget(2D)
  4. Android Jetpack LiveData
  5. android软键盘enter键的替换与事件监听
  6. Android 控件之Gallery和ImageSwitcher图
  7. android EditText输入金额,限制位数和显示
  8. android显示png图片,原来透明的地方都变成
  9. ANDROID开机动画分析
  10. Git,SVN使用方法杂记(更新中)