Activity间通过Intent传递数据的大小限制。
来源:互联网 发布:n5230软件下载 编辑:程序博客网 时间:2024/06/10 23:44
http://blog.csdn.net/pingfangx/article/details/52093225
这个问题没找到官方说明,针对网上的各种答案,自己实际测试了一下。
0x01结论
1.1传512K以下的数据的数据可以正常传递。
1.2传512K~1024K的数据会出错,闪退。
1.3传1024K以上的数据会报错:TransactionTooLargeException。
1.4考虑到Intent还包括要启动的Activity等信息,实际可以传的数据略小于512K
0x02准备工作
2.1怎么查看占用内存大小
见参考文献1、2。
2.2构建要传的数据
①我们构建一个1K的字符串;
②再构建ArrayList的字符串列表;
③用Intent.putStringArrayListExtra传递
我们知道1个char占2个字节,那么构建一个512的字符串就刚好1K了。
实测的时候发现512占了1040,于是减掉8个,取504个。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.3循环测试
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
2.4分析第509的时候闪退
当mArrayList的size是509的时候,就闪退了。
有以下两张图。
可以看到508的时候
522936/1024=510.68
509的时候
523960/1024=511.68
虽然还没有到512,但我还是得出512的结论,原因是Intent的其他内容也要占内存,所以诱发闪退的原因应该是512.
2.5循环查找TransactionTooLargeException下限
改下测试代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
2.6分析1018下限
1018的时候闪退,1019时捕获异常。
- 1
- 2
- 3
- 1
- 2
- 3
这个官方是有说明的,最在1M(见参考文献3),
上面的1039780/1024=1015.41,哈哈,不要在乎这些细节。
看下面2张图
1046536/1024=1022.01
1047560/1024=1023.01
0x03参考文献
[1]基于Android Studio的内存泄漏检测与解决全攻略
[2]使用新版Android Studio检测内存泄露和性能
[3]TransactionTooLargeException
[3]江湖问题研究– intent传递有没有大小限制,是多少?
阅读全文
0 0
- Activity间通过Intent传递数据的大小限制。
- Activity间通过Intent传递数据的大小限制。
- 【Android】intent传递数据时,数据大小的限制问题
- 【Android】intent传递数据时,数据大小的限制问题
- android中activity之间数据通过Intent的传递
- Android Activity通过Intent传递数据
- android传递数据方式4--通过Intent实现Activity之间的数据传递
- Activity间通过Intent传递对象的方法
- Activity间通过Intent传递Bitmap对象
- Intent之学习二(Activity间数据的传递)
- Activity之间的数据传递: Intent
- 通过Intent传递数据
- 通过intent、ClipboardManager在android不同activity之间传递数据
- android Activity之间通过Bundle和Intent传递数据
- 两个Activity之间通过Intent相互(双向)传递数据
- 通过Intent在Activity|Service之间传递数据
- 用intent在activity间传递数据
- 用Intent在Activity间传递数据
- 用函数实现strcat功能
- Mysql几种索引类型的区别及适用情况
- ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统
- python高级语法--闭包篇
- 在Ubuntu Linux 16.04下(64位)打开.ipynb文件
- Activity间通过Intent传递数据的大小限制。
- 在jsp中使用JDBC连接mysql数据库出现错误
- NGUI tween动画播放没有变化过程
- SDUT-1193 圆周率
- Mybatis列表批量插入并反正插入主键
- CENTTOS7 下安装JIRA
- Macbook pro 多版本jdk配置
- 学习笔记-------面向对象内存浅析
- 迭代最近点(ICP)进行点云配准