Android中进程间通信方式(IPC)
2016-10-30 20:35
155 查看
1使用Bundle
Bundle实现了Parcelable接口,可以在不同进程间传递,在Bundle中附加数据,通过intent可以由一个进程的组件启动另一个进程的组件。
2 使用文件
一个进程在文件中写入数据,其他进程再读取(涉及到写操作,线程要同步);或者一个进程把对象序列化到本地,另一个进程把对象反序列化。(进程间通信不适合用SharedPreference,系统对SP的读写有一定的缓存策略,多进程对SharedPreference的读/写,不可靠,容易丢失数据)
3使用ContentProvider
http://www.2cto.com/kf/201606/518621.html
某些系统应用有内置的ContentProvider,比如通讯录、短信记录、联系人、日程表,也可以为自己开发的应用定义ContentProvider供其他应用(进程)访问自身的数据,自定义ContentProvider要继承ContentProvider类并实现6个抽象方法,onCreate()、query()、insert()、delete、update()、getType(),然后在XML文件中注册,authority属性是ContentProvider的唯一标识;在其他进程中通过ContentResolver的query()、insert()、delete、update()可以获取ContentProvider中的数据,调用ContentResolver的增删改查四个方法,实际上是调用的ContentProvider中的四个方法(这四个方法由Binder线程池中的线程执行,运行在ContentProvider所在的进程中,onCreate()在主线程中执行),通过ContentProvider实现四个操作。ContentProvider底层的数据存储可以采用任何方式,用sqlite数据库也行,文件也行,甚至内存中的对象(如list、set集合)存储也行(常用数据库存储)。ContentProvider默认运行在app进程中,除非设置了process属性。ContentProvider可以设置读写权限,android:readPermission、android:writePermission,如果ContentProvider设置了读写权限,其他应用需要声明同样的权限才能进行读/写操作,否则其他应用会异常终止。ContentProvider的增删改查四个方法可能存在多线程并发访问,所以方法内部要做好线程同步。
4使用Messenger(Messenger对AIDL做了封装)
发送方和接收方要构建Handler,并通过handler构建Messenger,发送方通过messenger.send(message)发送message给接收方,接收方的handler收到消息后在handleMessage中处理消息,接收方通过message的replyTo参数可以拿到发送方的messenger对象,通过这个messenger对象接收方可以给发送方发送message,这样就实现了互相通信。
5使用socket
当Service启动时,开启子线程建立TCP连接,通过ServerSocket在某个端口监听,等待客户端的请求,当有客户端连接时,会生成一个新的socket,通过每次创建的socket和不同的客户端通信,通过socket的输入流可以得到客户端写入的数据。客户端activity启动时也开启一个子线程,在子线程中通过Socket建立TCP连接,通过socket的输出流可以向服务端写入数据。
6使用AIDL文件
Bundle实现了Parcelable接口,可以在不同进程间传递,在Bundle中附加数据,通过intent可以由一个进程的组件启动另一个进程的组件。
2 使用文件
一个进程在文件中写入数据,其他进程再读取(涉及到写操作,线程要同步);或者一个进程把对象序列化到本地,另一个进程把对象反序列化。(进程间通信不适合用SharedPreference,系统对SP的读写有一定的缓存策略,多进程对SharedPreference的读/写,不可靠,容易丢失数据)
3使用ContentProvider
http://www.2cto.com/kf/201606/518621.html
某些系统应用有内置的ContentProvider,比如通讯录、短信记录、联系人、日程表,也可以为自己开发的应用定义ContentProvider供其他应用(进程)访问自身的数据,自定义ContentProvider要继承ContentProvider类并实现6个抽象方法,onCreate()、query()、insert()、delete、update()、getType(),然后在XML文件中注册,authority属性是ContentProvider的唯一标识;在其他进程中通过ContentResolver的query()、insert()、delete、update()可以获取ContentProvider中的数据,调用ContentResolver的增删改查四个方法,实际上是调用的ContentProvider中的四个方法(这四个方法由Binder线程池中的线程执行,运行在ContentProvider所在的进程中,onCreate()在主线程中执行),通过ContentProvider实现四个操作。ContentProvider底层的数据存储可以采用任何方式,用sqlite数据库也行,文件也行,甚至内存中的对象(如list、set集合)存储也行(常用数据库存储)。ContentProvider默认运行在app进程中,除非设置了process属性。ContentProvider可以设置读写权限,android:readPermission、android:writePermission,如果ContentProvider设置了读写权限,其他应用需要声明同样的权限才能进行读/写操作,否则其他应用会异常终止。ContentProvider的增删改查四个方法可能存在多线程并发访问,所以方法内部要做好线程同步。
4使用Messenger(Messenger对AIDL做了封装)
发送方和接收方要构建Handler,并通过handler构建Messenger,发送方通过messenger.send(message)发送message给接收方,接收方的handler收到消息后在handleMessage中处理消息,接收方通过message的replyTo参数可以拿到发送方的messenger对象,通过这个messenger对象接收方可以给发送方发送message,这样就实现了互相通信。
5使用socket
当Service启动时,开启子线程建立TCP连接,通过ServerSocket在某个端口监听,等待客户端的请求,当有客户端连接时,会生成一个新的socket,通过每次创建的socket和不同的客户端通信,通过socket的输入流可以得到客户端写入的数据。客户端activity启动时也开启一个子线程,在子线程中通过Socket建立TCP连接,通过socket的输出流可以向服务端写入数据。
6使用AIDL文件
相关文章推荐
- Android中进程间通信(IPC)方式总结
- Android中进程间通信(IPC)方式总结
- Android——IPC机制(二)进程间通信方式
- Android进程间通信(IPC)常用方式
- android进程间通信(IPC)的多种方式
- Android中进程间通信(IPC)方式总结
- Android进程间通信方式总结(IPC)
- 【IPC】Linux进程间通信(Inter Process Communication)通信方式
- Android IPC进程通信——Messager方式
- android进程间通信ipc Socket (二)
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(4)
- Android进程间通信(IPC)机制Binder简要介绍
- Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
- Android IPC方式 Bundle实现
- Android IPC机制(四)用ContentProvider进行进程间通信
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
- Android进程间通信--消息机制及IPC机制实现
- 详解Android 进程间通信的几种实现方式