江湖问题研究-- intent传递有没有限制大小,是多少?
出门一步,便是江湖。江湖上有很多流言。
比方这条:
intent传递是有限制大小的,详细在40KB左右。
当然也有传言说是1M左右。
数百头母驴为何半夜慘叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤为何频频失窃? 连环强奸母猪案。到底是何人所为? 老尼姑的门夜夜被敲,到底是人是鬼? 数百仅仅小母狗意外身亡的背后又隐藏着什么? 这一切的背后, 是人性的扭曲还是道德的沦丧? 是性的爆发还是饥渴的无奈? 欢迎观看今天的《走进安卓》
停,停。说好的不打脸呢。。
研究開始
想要研究intent到底能传递多大内存的数据,你必须给他传一个数据(这不是废话么),然后后去到这些数据的大小,进行传递。依据实际程序执行情况,来观察传递的极限。
因为一般对象大小不easy获取,这里採用bitmap来传输,能够用bitmap的getByteCount()方法获得大小
Tips: 图片是以像素矩阵的形式存在的
本文出自: http://blog.csdn.net/wingichoy/article/details/50679322
1.新建一个測试环境,MainActivity
在布局中加入一个button
<?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()中载入图片。而且进行传递
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。推断是否传输成功
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 !!!
这些是实验结果。详细的原因是啥,笔者水平有限。就不深究了,有兴趣的能够继续研究~~~ 有错误的话 能够提出 欢迎一起讨论
欢迎关注我的博客 谢谢!
江湖问题研究-- intent传递有没有限制大小,是多少?的更多相关文章
- 江湖问题研究-- intent传递有没有大小限制,是多少?
出门一步,便是江湖,江湖上有许多流言. 比如这条: intent传递是有大小限制的,具体在40KB左右. 当然也有传言说是1M左右. 数百头母驴为何半夜惨叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤 ...
- Android 通过 Intent 传递类对象或list对象
(转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...
- Android 全局获取 Context 与使用 Intent 传递对象
=====================全局获取 Context======================== Android 开发中很多地方需要用到 Context,比如弹出 Toast.启动活 ...
- Intent传递对象——Serializable和Parcelable区别
为什么要将对象序列化? 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.用过序列化对象在网络中传递对象: 3.通过序列化对象在进程间传递对象. 1.实现Serializable接口 Seri ...
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
- Android 开发中使用Intent传递数据的方法
Activity之间通过Intent传递值,支持基本数据类型和String对象及 它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.shor ...
- Android 通过 Intent 传递类对象
Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...
- Android 开发笔记——通过 Intent 传递类对象
Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...
- Android Intent传递数据
刚开始看郭大神的<>,实现以下里面的一些例子.Intent传递数据. 我们利用显示的方式进行Intent的启动. 1.启动intent并输入数据. Intent intent=new In ...
随机推荐
- Python学习——第一天
https://www.runoob.com/python/python-chinese-encoding.html 第一个python程序 [root@mini1 ~]# vi python01.p ...
- Android library projects cannot be launched解决方法
着了一个例子项目,总是报标题说的错误. 解决方法如下: 红圈的地方,勾掉. 貌似如果你这个项目是作为一个被引用的project的话, 要勾上这个.单独作为一个app的话,不能勾选这个. --不懂,瞎写 ...
- [adb 学习篇] adb常用命令
https://testerhome.com/topics/2565 Android 常用 adb 命令总结 针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb ...
- Wannafly模拟赛2
Contest 时间限制:1秒 空间限制:131072K 题目描述 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高. 求有多少组(x,y),使得 ...
- 【SCOI2003】【BZOJ1092】蜘蛛难题
有一堆管道,还有一个蜘蛛Willy,如下图所示.所有管道的是上端开口,下端封底,直径都是1cm,连接两个管道的连接容量无限,但体积可以忽略不计. 在第一个管道上方有一个水源,从中有水不断往下流,速度为 ...
- linux监控平台搭建-内存
linux监控平台搭建-内存 上一篇文章说的硬盘.就写一下.更加重要的东西.在手机上面是RAM.机器是memory.内存是按照字节编址.每个地址的存储单元可以存放8bit的数据.cpu 通过内存地址获 ...
- 【BZOJ入门3189】 猜数字(数学,搜索)
Description 味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏.猜数字游戏的规则是这样的,告诉你一个正整数 n(2<=n<=11),然后味味心中会想一个 n 个数字组成的 ...
- es6总结(十一)--class & decorator
- touch上滑加载
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 35深入理解C指针之---结构体基础
一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...