1、android 中进程间通讯经常使用的有如下几种机制java
-----------------------------------------------------------------------------------------------------------------------android
名称 优势 缺点 适用场景网络
-----------------------------------------------------------------------------------------------------------------------并发
Bundle 简单易用 只能传输Bundle支持的数据类型 四大组件间的进程通讯ide
-----------------------------------------------------------------------------------------------------------------------高并发
文件共享 简单易用 不适合高并发场景,而且没法作到 无并发访问情形,交换简单spa
进程间及时通讯 的数据实时性不高的场景
线程
-----------------------------------------------------------------------------------------------------------------------code
AIDL 功能强大,支持一对多并发 使用稍复杂,须要处理好线程同步 一对多通讯且有RPC需求对象
通讯,支持实时通讯
-----------------------------------------------------------------------------------------------------------------------
Messenger 功能通常,支持一对多串行 不能很好处理高并发情形,不支持 低并发的一对多即时通
通讯,支持实时通讯 RPC, 数据经过Message进行传输 信,无RPC需求 或者无需
只能传输Bundle支持的数据 类型 返回结果的RPC需求
----------------------------------------------------------------------------------------------------------------------
ContentProvider 在数据源访问页面功能强大, 能够理解为受约束的AIDL, 一对多的进程间的数据共享
支持一对多并发数据共享, 主要提 供数据源的CRUD操做
可经过Call方法扩展其余操做
----------------------------------------------------------------------------------------------------------------------
Socket 功能强大,能够经过网络数 实现细节有点繁琐 网络数据交换
字传输 节流,支持一对多 ,不支持直接的RPC
并发实时通讯
---------------------------------------------------------------------------------------------------------------------
2、 Bundle
Bundle实现了Parcelable接口,因此能够方便的在不一样进程间传输,当在一个进程中启动了另一个进程的Activity、Service、Receiver,能够在Bundle中附加须要传输给远程进程的信息并经过Intent发送出去。
3、文件共享
Activity1:----------------- private void persistToFile() { new Thread(new Runnable() { @Override public void run() { User user = new User(1, "hello world", false); File dir = new File(MyConstants.CHAPTER_2_PATH); if (!dir.exists()) { dir.mkdirs(); } File cachedFile = new File(MyConstants.CACHE_FILE_PATH); ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream( new FileOutputStream(cachedFile)); objectOutputStream.writeObject(user);//利用Serializable序列化的过程 Log.d(TAG, "persist user:" + user); } catch (IOException e) { e.printStackTrace(); } finally { MyUtils.close(objectOutputStream); } } }).start(); } Activity2:---------------- private void recoverFromFile() { new Thread(new Runnable() { @Override public void run() { User user = null; File cachedFile = new File(MyConstants.CACHE_FILE_PATH); if (cachedFile.exists()) { //对MainActivity中user对象反序列化的过程(Serializable), //获得的是一个新的对象 ObjectInputStream objectInputStream = null; try { objectInputStream = new ObjectInputStream( new FileInputStream(cachedFile)); user = (User) objectInputStream.readObject(); Log.d(TAG, "recover user:" + user); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { MyUtils.close(objectInputStream); } } } }).start(); }