美文网首页
Android Activity间Intent传递数据报Tra

Android Activity间Intent传递数据报Tra

作者: 黑芝麻胡 | 来源:发表于2019-05-22 14:39 被阅读0次

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

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

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

图(1)

总结:

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

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

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

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

相关文章

网友评论

      本文标题:Android Activity间Intent传递数据报Tra

      本文链接:https://www.haomeiwen.com/subject/znzyzqtx.html