Android Intent 传递数据限制

背景


最近做直播间推流时,有个别用户反馈,不能进入直播间推流,查看上报错误日志没有任何问题,经过艰难的排查,最终定位到页面启动时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也就会这个限制了。




参考文章:

探究intent传递大小限制






文章目录
  1. 1. 背景
  2. 2. 排查
  3. 3. 原因
  4. 4. 总结