江湖问题研究-- intent传递有没有大小限制,是多少?
出门一步,便是江湖,江湖上有许多流言。
比如这条:
intent传递是有大小限制的,具体在40KB左右。
当然也有传言说是1M左右。
数百头母驴为何半夜惨叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤为何频频失窃? 连环强奸母猪案,究竟是何人所为? 老尼姑的门夜夜被敲,究竟是人是鬼? 数百只小母狗意外身亡的背后又隐藏着什么? 这一切的背后, 是人性的扭曲还是道德的沦丧? 是性的爆发还是饥渴的无奈? 欢迎观看今天的《走进安卓》
停,停,说好的不打脸呢。。
研究开始
想要研究intent到底能传递多大内存的数据,你必须给他传一个数据(这不是废话么),然后后去到这些数据的大小,进行传递,根据实际程序运行情况,来观察传递的极限。由于一般对象大小不容易获取,这里采用bitmap来传输,可以用bitmap的getByteCount()方法获得大小
Tips: 图片是以像素矩阵的形式存在的
本文出自: http://blog.csdn.net/wingichoy/article/details/50679322
1.新建一个测试环境,MainActivity
在布局中添加一个按钮
<?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 全局获取 Context 与使用 Intent 传递对象
=====================全局获取 Context======================== Android 开发中很多地方需要用到 Context,比如弹出 Toast.启动活 ...
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
- 【转】Android 之最新最全的Intent传递数据方法
原文地址:https://www.jianshu.com/p/1169dba99261 intent传递数据 为什么要和intent单独拿出来讲,因为Intent传递数据也是非常重要的 一.简单的传递 ...
- Intent传递对象的几种方式
原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/51105060 李济洲的博客 Intent的使用方法相信你已经比較熟悉了,Inte ...
- android#使用Intent传递对象
参考自<第一行代码>——郭霖 Intent的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent中添加一些附加数据,以达 ...
- Android 通过 Intent 传递类对象或list对象
(转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...
- Intent传递对象——Serializable和Parcelable区别
为什么要将对象序列化? 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.用过序列化对象在网络中传递对象: 3.通过序列化对象在进程间传递对象. 1.实现Serializable接口 Seri ...
- Android 开发中使用Intent传递数据的方法
Activity之间通过Intent传递值,支持基本数据类型和String对象及 它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.shor ...
随机推荐
- Lua热更新时正确设置文件名
Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容, ...
- webpack dev server 和 sublime text 配合时需要注意的地方
参考:https://webpack.js.org/guides/development/ Adjusting Your Text Editor Some text editors have a &q ...
- ANTLR和StringTemplate实例:自动生成单元测试类
ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...
- android ActionBarActivity设置全屏无标题
新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时!!! 原因是Actio ...
- Hadoop学习笔记1:伪分布式环境搭建
在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下: 1.CentOS 6.7下安装JDK , 地址: http://blog.csdn.net/yule ...
- 深入浅出如何解析xml文件---下篇
在上篇博文中,小编主要介绍xml的两种解析方式,分别是dom4j和dom,今天这篇博文,小编主要来简单介绍一下xml的其她两种解析方式sax和jdom. sax解析xml文件 sax,全称是Simp ...
- activiti 配置节点 连线信息获取
1.1.1. 前言 当使用eclipse插件进行流程设计的时候,部署流程之后,我们如何获取我们定义的所有的节点.连线.关口等配置信息呢?有的人看到这个需求,不免窃喜,这不很简单嘛,重新打来bmpn中定 ...
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- springMVC源码分析--HandlerInterceptor拦截器(一)
对SpringMVC有所了解的人肯定接触过HandlerInterceptor拦截器,HandlerInterceptor接口给我们提供了3个方法: (1)preHandle: 在执行controll ...
- [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档:http://struts.apache.org/releas ...