bingoogolapple / BGAPhotoPicker-Android

Android 图片选择、预览、九宫格图片控件、拖拽排序九宫格图片控件
2.24k stars 413 forks source link

giving up android.os.TransactionTooLargeException: data parcel size 676704 bytes #164

Open chenyabingsuny opened 5 years ago

chenyabingsuny commented 5 years ago

Second failure launching com.kismartstd.employee/cn.bingoogolapple.photopicker.activity.BGAPhotoPickerPreviewActivity, giving up android.os.TransactionTooLargeException: data parcel size 676704 bytes

shanxu9198 commented 5 years ago

同样问题

a451492549 commented 4 years ago

TransactionTooLargeException: 通过Intent传递或者返回的数据是存放在一个叫做Binder transaction buffer的缓存区,这个缓冲区的大小为1Mb(Android 28 Platform),当缓冲区不够用时就会抛出异常

如果有多个数据传递同时进行,是共用缓冲区的1Mb,而不是每一个传输各分配1Mb缓存。这就有可能当多个传输同时进行时,数据大小小于1M还是抛出TransactionTooLargeException异常

建议的解决方法就是尽可能减小传输的数据,至于具体要多效合上也没个具体的数值,也不可能知道,因为并发传输的数量不固定,但是至少可以肯定的是超过1M肯定会抛异常

解决方法 根据官方的建议就是减小传输的数据大小,或者拆分数据分次传输,但是如果数据量真的很大且需一次性传输可参考以下:

1.数据保存到static全局变量中

2.数据保存到本地存储中,比如本地文件或数据库,在目标Activity中再提取出来

3.通过EventBus.postSticky传递包含传递数据的粘性事件,在目标Activity中接收该事件提取数据