Android Activity间Intent传递数据报TransactionTooLargeException异常

1、为什么Activity间Intent传递数据会报TransactionTooLargeException异常

因为Intent传递数据中  用到了Binder的通信机制,Intent中的数据,会作为 Parcel 被存储在Binder的事务缓冲区中的对象进行传输,而Binder的事务缓冲区中具有一个有限的固定大小,当前为 1MB。当然也并不是说传递的数据在 1MB一下就是安全的,这里的1MB空间并不是当前操作独享的,而是有当前进程所共享的。也就是说Intent在Activity中传递数据本身也不太适合传递太大数据。

当然阿里给的解决方案是用EventBus进行传递

4952157-9d4f82874447a7b0.png
图(1)

总结:

        1、Intent无法传递大数据的原因是 传递数据时用到Binder的通信机制,Binder的事务缓冲区限制了数据大小。

        2、Binder的事务缓冲区限定在1MB大小,但是这个空间是共享的。也就是说并不是传递1MB以下就是安全的,要根据当前的环境而定

        3、不要挑战Intent传递数据的极限,对于大数据 , 例如:BitMap  长字符串等。不要用Intent来传递

        4、解决大数据的问题,可以从数据源出发,根据数据的标识,还原数据,或者先持久化在还原,当然也可以用EventBus的粘性事件来解决

转载于:https://www.jianshu.com/p/a0c437cfbe69

猜你喜欢

转载自blog.csdn.net/weixin_34273481/article/details/91172896