首页 > 试题广场 >

为什么在Android中Activity,Fragment之

[问答题]

为什么在Android中Activity,Fragment之间传递参数需要通过Bundle?有什么限制?

1、Bundle实现了Parcelable接口,有键值映射,Parcelable是Android推荐的序列化与反序列化方式。
2、Bundle的数据序列化存储以后,反序列化在Bundle内部的ClassLoader。
3、限制:Bundle不能传递大容量的数据信息,原因是底层parcel对象在不同activity直接传递过程中保存在一个叫做Binder交换缓冲区的地方,缓冲区最大1MB,并且这是该进程中所有正在进行中的传输对象所公用的。而且在不同Android版本的缓冲区大小不一样,版本越低,缓冲区越小。
发表于 2019-03-16 13:58:22 回复(0)
更多回答
推荐

1. Activity间,可能会跨进程,需要Parcel(10分)

2. Activity与Fragment或Fragment之间虽然不会跨进程,但是由于Activity可能会被回收,需要为Fragment保存及恢复必要的状态及参数,所以也需要通过Bundle来保证传递的数据可恢复(10分)

3. 受Binder缓冲区大小影响。自定义类需要实现parcelable接口或serializable接口(10分)

发表于 2018-07-25 20:36:12 回复(0)