Android IPC方式

基础部分

序列化

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值