Android IPC方式

来源:互联网 发布:网络打印机a3怎么设置 编辑:程序博客网 时间:2024/06/09 21:30

基础部分

序列化

Serializable

java提供的,使用简单,但是内存开销大,序列化反序列化大量IO操作

最好定义serialVersionUID,否则反序列化可能失败,原因,百度。

private static final long serialVersionUID = 1L;

Parcelable

android做了优化,开销小,推荐方式,但是使用麻烦,怎么使用百度。
同时主要用于序列化到内存上,如果要序列化到存储设备或者网络上,也可以但是使用更麻烦,这个时候推荐使用Serializable方式

总结一下:

  1. 如果序列化到存储设备或者网络,推荐使用Serializable方式
  2. 其它情况,尽量用Parcelable方式

IPC方式

使用Bundle

这个就不多说了,基本类型,String,实现了Serializable,Parcelable接口的都可以传入Bundle,适用于四大组件之间的通信

使用文件共享

一个进程序列化一个对象到本地存储文件,另一个进程然后反序列化读取文件,就可实现进程间通信
缺点是,文件读取支持并发的,所以可能造成多个进程间读写不同步的问题。缺点实时性不好

同时SharedPreferences是个特例,虽然也是以xml的形式存储在文件中,但是SharedPreferences并不是直接写文件,而是先写内存缓存,然后在commit的时候,才会去写文件,所以在多进程模型下,很可能会造成数据丢失,所以不推荐用于进程通信
看这里《Android应用Preference相关及源码浅析(SharePreferences篇)》

使用Messenger

用的少,看这里 《Android应用进程间通信之Messenger信使使用及源码浅析 》

说明一点,底层采取IBinder机制,同时一次只处理一个请求,所以是串行处理的,所以不用考虑同步并发的问题。。

挖个坑,没时间去看源码,以后碰到了再研究

使用AIDL

看这里《Android IBinder机制简单介绍 》

使用ContentProvider

就是专门用于不同应用间进行数据共享的,底层实现还是IBinder,操作数据库,CRUD,增删改查操作

使用Socket

这个就是web编程中的服务器端客户端socket编程的方式了
分两种,TCP/UDP socket通信

服务器端可以通过service一直监听是否有socket连接过来

0 0
原创粉丝点击