6.1.2 利用Intent对象传递数据的优缺点
Intent对象是组件间传递数据最常用的手段。通过Intent对象在组件中传递数据,有一些优点。
❑开发便捷
利用Intent进行数据传输本身就属于意图机制的一部分,开发者不再需要进行序列化和反序列化等额外的工作,只需利用Intent对象本身提供的接口,设置数据即可。比如,要向下一个界面组件传递帐号、密码信息,等等信息,只需要调用Intent.setExtra函数一一赋值就好,其余传输细节都无需关注。
❑跨应用、跨进程
在Android的意图机制中,Intent对象的传递是通过序列化和反序列化来实现的,因此,附加在Intent对象中的数据可以在不同的应用和进程中传输。
但尺有所短,寸有所长,基于Intent对象的数据传输也存在诸多局限性。
❑传输开销较大
Intent对象的传输,需要经过至少两次的序列和反序列化(第一次从调用组件传输至组件管理服务,第二次从组件管理服务传输至实现组件),这不仅会增加内存开销,也会耗费很多时间,数据传输效率较低。
❑不适合在多个组件间共享数据
Intent对象的传递是线性的,由一个组件传递至下一个组件,依次进行。如果依靠这种模式在多个组件间共享数据,不仅时间和内存的开销都会增大,更重要的是会增加开发成本,增加了组件的耦合性。开发者需要考虑传递路径上各个组件中参数的获取与传递事宜,而无论该组件是否需要这份数据。
比如,如果期望将一份数据从A组件分享至不与其直接关联的C组件,需要途经B组件,这就要求B组件必须能够接受和重新分发来自A的数据,即便它本身不需要分享这份数据,无形中,增加了B组件的实现成本。
因此,Intent对象适用于两个组件间点对点的数据传递,而不适合多个组件共享数据的场景。如果组件间需要传递的数据过大,那就不要全部读入到Intent的Extras中进行序列化传递,而应将数据放在外存储设备中,通过URI进行传递。