江湖问题研究-- intent传递有没有大小限制,是多少?
2016-02-17 11:50
162 查看
出门一步,便是江湖,江湖上有许多流言。
比如这条:intent传递是有大小限制的,具体在40KB左右。
当然也有传言说是1M左右。数百头母驴为何半夜惨叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤为何频频失窃? 连环强奸母猪案,究竟是何人所为? 老尼姑的门夜夜被敲,究竟是人是鬼? 数百只小母狗意外身亡的背后又隐藏着什么? 这一切的背后, 是人性的扭曲还是道德的沦丧? 是性的爆发还是饥渴的无奈? 欢迎观看今天的《走进安卓》
停,停,说好的不打脸呢。。
研究开始
想要研究intent到底能传递多大内存的数据,你必须给他传一个数据(这不是废话么),然后后去到这些数据的大小,进行传递,根据实际程序运行情况,来观察传递的极限。由于一般对象大小不容易获取,这里采用bitmap来传输,可以用bitmap的getByteCount()方法获得大小Tips: 图片是以像素矩阵的形式存在的
本文出自: /article/3662943.html
1.新建一个测试环境,MainActivity
在布局中添加一个按钮[code]<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.wingsofts.progresscircle.MainActivity"> <Button android:onClick="test" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
2.在onClick()中加载图片,并且进行传递
[code]public void test(View v){ mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.p512); Log.e("wing","图片内存的大小是"+mBitmap.getByteCount()/1024+"kb"); Intent intent = new Intent(this,MainActivity.class); intent.putExtra("test", mBitmap); startActivity(intent); }
注意这里打了一下log,获得图片在内存中所占的大小。这里为了方便,我已经把图片所需要的大小命为文件名。如下:
在接受的时候 打一下log,判断是否传输成功
[code]protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(getIntent().getParcelableExtra("test")!=null){ Log.e("wing","接收到了数据" + toString()); } }
击破流言
江湖传闻,超过40k的intent会吃成胖子,继而体内爆炸。我们就先从40KB下手,用一个93KB的图片做实验。 运行及Log如下:观察到93KB的图片传输成功,那么这条流言不攻自破了。
第二条流言呢
我们拿一个498KB的图片做测试:看到传输成功了。。
接着再来传输1168KB的图片:
可以看到 大于1M的图片导致intent不能正常传输,并且无法启动activity
然而真的是小于1M都能传输吗?
本着研究的精神,我们在测试一下别的大小,650KB的日了狗了!!程序直接闪退,而且没有异常提示。
现在回头想想,刚才传输了一个498的成功传输,650的却出现了问题,难道512也是一个坎?
来试试512KB的
哑巴里,果然也崩了。。
继续试验 507挂了,
……
在继续 506 挂了
……
再继续 505 ,正常!!!!
试验得出505是一个app正常运行的极限值了。
有朋友指出,可能和运存大小有关,我将运存分别设置为256MB,1G,2G测试结果相同,另外还有朋友指出厂商可以自定义,这个我没有真机无法测试。。
其实这个研究只是为了防止面试官问你intent缺陷时候你答大小限制具体是多少,现在我们至少知道了40kb的流言是错误的。研究的意义也不大,反正记住,intent传递值尽量小就可以了
来总结下
1.当大小为505以下的时候,正常传输2.当大小为505-1024的时候,程序闪退,没有异常
3.当大小大于1024的时候,log会显示 !!! FAILED BINDER TRANSACTION !!!
这些是实验结果,具体的原因是啥,笔者水平有限,就不深究了,有兴趣的可以继续研究~~~ 有错误的话 可以提出 欢迎一起讨论
欢迎关注我的博客 谢谢!
相关文章推荐
- DFS专练
- 江湖问题研究-- intent传递有没有大小限制,是多少?
- ffmpeg对H.264进行rtp打包
- windows 自启动脚本并注册服务
- Android AIDL用法解析
- [计算几何笔记3]最小圆覆盖
- 反汇编异常定位
- 借助共享缓存redis实现分布式锁
- libevent的使用(socket)
- jfinal_BLOG v1.0
- 秒杀DX12!Vulkan 1.0规范正式发布
- 多核CPU的春天:Vulkan实测 完爆OpenGL
- Thrift入门及Java实例演示
- java 单例模式(Singleton)
- phpredisAdmin
- Android studio 自定义注释模板
- Ubuntu14.04安装tomcat7.0和jdk1.7
- Mysql常用命令详解
- Python 17.1 HTTP协议简介
- Tomcat学习—Tomcat的server.xml配置文件