Android -传递序列化在不同机型上的限制

Android · harkben · 于 发布 · 最后由 harkben回复 · 426 次阅读
96

背景:昨晚半夜了突然被产品经理的微信喊住。在同一个模块中,大面积用户出现崩溃,而且今天1点 客户要做千人直播 - -!。当时我的额头就发烫了。。。

具体原因是这样,页面跳转的时候 intent 传递了一个序列化的bean,这个bean中包涵有一个4600+条数据的集合(虽然不是我写的,但锅已经在我手上了,同时我也很感兴趣)。
看流量字符集大概有 1M以上大小 在华为手机、努比亚、三星上会崩溃,抛出 JavaBinder /n transcation code is 102;我记得是这样
在Oppo vivo 上不会抛出 在stackoverflow 也找到类似,但是只是类似。
目前已知这五款机型

今早一大早来确认问题后,为了在不做版本更新的情况瞎 暂时只能让后台对数据暂时做截取,控制数据大小。

**疑问: 在对 对象做序列化传递时,考虑到序列化后变为流传输,此时可使用的内存极限跟framework是否有关系呢

共收到 7 条回复
96
harkben · #1 ·

如何测试,暂时也没头绪,老司机快来带带我呀

96
lancewong · #3 ·

这么大数据不应该用Intent来做传递了的。

96
harkben · #4 ·

#2楼 @nu11p01nter 谢谢,豁然开朗

96
harkben · #5 ·

#3楼 @lancewong - - 是的。

61
weishu · #6 ·

你用Intent传递数据,实际上走的是跨进程通信(IPC),跨进程通信需要把数据从内核copy到进程中,每一个进程有一个接收内核数据的缓冲区,默认是1M;如果一次传递的数据超过限制,就会出现异常。

不同厂商表现不一样有可能是厂商修改了此限制的大小,也可能同样的对象在不同的机器上大小不一样。

传递大数据,不应该用Intent;考虑使用ContentProvider或者直接匿名共享内存。针对你的情况,简单考虑可以考虑分段传输。

96
harkben · #7 ·

#6楼 @weishu 非常感谢你的回答。对于IPC不太熟悉。补给去了。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册