Android中常见IPC方法总结
2016-05-19 23:47
351 查看
IPC (Interprocess communication)跨进程通信,是指在两个进程之间交换数据的过程。多进程通信一般分为两种情况。第一种,一个应用因为自身的需要采用多进程实现,比如某些模块由于特殊原因需要运行在单独的进程中。第二种情况,当前应用需要获得其它应用的数据,由于是两个应用,所以必须采用跨进程的方式。下面就对常用的IPC方法做一个总结。
Activity,Service,Receiver都是支持在Intent中传递Bundle的,由于Bundle实现了Parcelable接口,所以他可以在不同进程间传输。我们可以在Bundle中附加数据,并通过Intent传送出去。当然,传送的数据必须是能够被序列化的。关于Android中序列化的知识可以参考/article/2220760.html
A进程把数据写入文件,B进程通过读取这个文件来获得数据。但这这种方法有一个问题就是并发读/写问题。有一个特例,SharedPreferences是Android中提供的轻量级存储方案,底层采用XML实现。但是对于他的读写有一定的缓存策略,因此不建议在进程间通信中使用他。
在MainActivity的onResume中序列化一个对象到sd卡,然后再SecondActivity的onResume中反序列化。关键代码如下
Messenger是一种轻量级的IPC方案,他的底层实现时AIDL。他是以串行的方式处理客户端发来的消息的,一次处理一个请求,因此我们不考虑线程同步问题。
下面是一个例子,客户端向服务端发送一个请求,服务的接到请求后向客户端返回一个消息,Service是注册在另外一个进程中的。
MessengerService
MessengerActivity
注:
Service
Service中有一个Handler,用来处理Client发来的消息,并在Handler中新建一个Messenger client = msg.replyTo来向客户端返回消息。
在onBind中返回他里面的Binder对象
Client
为了接收服务端的消息,客户端也需要准备一个接收消息的Messenger和Handler。
msg.replyTo = mGetReplyMessenger,当客户端发送消息的时候,需要把接收服务端回复的Messenger通过Message的replyTo参数传给服务端。
Messenger以串行的方式处理客户端发来的消息的,一次处理一个请求,如果有大量的并发请求,那么用Messenger就不合适了,需要用AIDL。关于AIDL的讲解请参考/article/3654457.html
ContentProvider是Android中专门用于应用间进行数据共享的方式。
实现思路,首先在远程Service建立一个TCP服务,然后在主界面中链接TCP服务,连接上后就可以给服务端发消息,服务端随机会随机回应一句话。
IPC方式的优缺点和适用场景
1、使用Bundle
Activity,Service,Receiver都是支持在Intent中传递Bundle的,由于Bundle实现了Parcelable接口,所以他可以在不同进程间传输。我们可以在Bundle中附加数据,并通过Intent传送出去。当然,传送的数据必须是能够被序列化的。关于Android中序列化的知识可以参考/article/2220760.html
2、使用文件共享
A进程把数据写入文件,B进程通过读取这个文件来获得数据。但这这种方法有一个问题就是并发读/写问题。有一个特例,SharedPreferences是Android中提供的轻量级存储方案,底层采用XML实现。但是对于他的读写有一定的缓存策略,因此不建议在进程间通信中使用他。
举例
在MainActivity的onResume中序列化一个对象到sd卡,然后再SecondActivity的onResume中反序列化。关键代码如下
3、使用Messenger
Messenger是一种轻量级的IPC方案,他的底层实现时AIDL。他是以串行的方式处理客户端发来的消息的,一次处理一个请求,因此我们不考虑线程同步问题。下面是一个例子,客户端向服务端发送一个请求,服务的接到请求后向客户端返回一个消息,Service是注册在另外一个进程中的。
MessengerService
Service
Service中有一个Handler,用来处理Client发来的消息,并在Handler中新建一个Messenger client = msg.replyTo来向客户端返回消息。
在onBind中返回他里面的Binder对象
Client
为了接收服务端的消息,客户端也需要准备一个接收消息的Messenger和Handler。
msg.replyTo = mGetReplyMessenger,当客户端发送消息的时候,需要把接收服务端回复的Messenger通过Message的replyTo参数传给服务端。
4、AIDL
Messenger以串行的方式处理客户端发来的消息的,一次处理一个请求,如果有大量的并发请求,那么用Messenger就不合适了,需要用AIDL。关于AIDL的讲解请参考/article/3654457.html
5、ContentProvider
ContentProvider是Android中专门用于应用间进行数据共享的方式。
6、Socket
实现思路,首先在远程Service建立一个TCP服务,然后在主界面中链接TCP服务,连接上后就可以给服务端发消息,服务端随机会随机回应一句话。
总结
IPC方式的优缺点和适用场景相关文章推荐
- 【转】【翻译】Android Support Library Features(一)
- Android开发--所有动画使用详解
- Android四大组件之Activity
- Android Drawable - State List Drawable使用详解(附图)
- 安卓事件传递机制个人理解版
- 一个帖子学会Android开发四大组件
- Android Studio JNI编程
- Android五种储存方式—sqlite数据库存储
- Android的自定义控件起步
- 解决Warning:Ignoring InnerClasses attribute for an anonymous inner class associated EnclosingMethod at
- Android中的异步任务
- Android ListFragment 中给LinearLayout添加点击事件
- Android matrix camera处理图片绕X轴Y轴翻转(类似3D效果)
- Android消息机制字典型探究(一)
- android收货地址整理
- Android 截屏技术
- Android Launcher分析和修改4——初始化加载数据
- Android5中存储方式之文件外部存储SDCard存储
- Android MVP
- Android系统休眠导致的严重问题