组件间的数据传递

温故而知新,可以为师,咦…

切入正题,下面介绍五种组件间的数据传递:

  • 使用intent.putExtras()
    我们最常用的一种方式,Intent对象适用于两个组件间点对点的数据传递,而不适合多个组件共享数据的场景。如果组件间需要传递的数据过大,那就不要全部读入到intent的extras中进行序列化传递,而应将数据放在外存储设备中,通过URI传递。一般我们startActivity中传递对象,那么至少就要序列化四次(包括序列化2次和反序列化2次)。
    这里写图片描述

画的丑了… Intent先将对象序列化传递给组件管理服务(ActivityManagerService),经由组件管理服务反序列化,进行解析,再将对象序列化到activity,继而反序列化得到数据。 大概过程就是这样。(具体写入过程在ActivityManagerProxy)这样意味增加内存开销,耗费很多时间,数据的传输效率低。

  • 文件进行数据共享
    通过Context.openFileOutput()等函数创建的文件,都是应用的私有文件,存储在应用下的files文件目录下,只有本应用组件才可以进行读写或写入,只能作为本应用组件间共享数据的载体。如果想在不同应用的组件中传递数据,那么就要将数据传出到SD卡。缺点就是:读写操作的开销大

  • 全局数据共享
    但是要注意onTerminate()不一定会被调用,所以不能依赖onTerminate(),可以提供一个函数在修改后直接写入,如果数据修改比较频繁就可以交给组件,比如activity在适当的时机写入(onPause)。不能夸应用访问(也就是跨进程),全局对内存占用时间一直到应用结束,对内存开销大。

  • 组件共享数据(Content Provider)

  • 利用服务组件共享数据
    在绑定服务下工作的服务,可以与调用组件建立双向的通信连接,利用进程间的通信进制在组件间传输数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值