Android IPC方式
2015-11-29 16:14
274 查看
基础部分
序列化
Serializable
java提供的,使用简单,但是内存开销大,序列化反序列化大量IO操作最好定义serialVersionUID,否则反序列化可能失败,原因,百度。
private static final long serialVersionUID = 1L;
Parcelable
android做了优化,开销小,推荐方式,但是使用麻烦,怎么使用百度。同时主要用于序列化到内存上,如果要序列化到存储设备或者网络上,也可以但是使用更麻烦,这个时候推荐使用Serializable方式
总结一下:
如果序列化到存储设备或者网络,推荐使用Serializable方式
其它情况,尽量用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连接过来
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories