背景
最近做直播间推流时,有个别用户反馈,不能进入直播间推流,查看上报错误日志没有任何问题,经过艰难的排查,最终定位到页面启动时intent
传参数据量太大的问题。
排查
面对这个问题,首先觉得很不可思议,开发和测试过程中没有任何问题。
紧急配置一个线上直播间,找到出问题的机型,无法复现问题。
再次怀疑接口数据返回问题,抓包查看,一切正常。
最后在同事的帮助下怀疑数据量的问题,搜索intent
传参大小限制,才知道掉坑里去了。
测试直播间配置的商品数据较少,因此开发和QA验证过程中,一切正常,上线后,店铺直播间配置大量的商品数据,造成跳转异常。
原因
Zygote孵化而来的用户进程,所映射的Binder内存大小是小于1M的,准确说是((1 * 1024 * 1024) - sysconf(_SC_PAGE_SIZE) * 2)
,这个限制定义在frameworks/native/libs/binder/processState.cpp类中,如果传参数超过这个大小,系统就会报错,因为Binder本身就是为了进程间频繁而灵活的通信所设计的,并不是为了拷贝大数据而使用的。
总结
startActivity携带的数据会经过Binder
内核再传递到目标Activity中去,因为binder映射内存的限制,所以startActivity也就会这个限制了。
参考文章: