android activity 大小限制,【Android】intent传递数据时,数据大小的限制问题
Android开发人员都知道,Intent适用于在不同的Activity之间传递数据,包括参数、字符串、以及序列化的对象等。但是笔者所做的项目用到了使用Intent 传递Bitmap图片对象,图片的数据量相对来说是比较大的,那么intent能否胜任传递图片的任务呢?
首先很明显bitmap实现了Android中的Parcelable接口,可以序列化。因此理所当然能够通过intent传递,然而图片的大小有没有限制呢?
Bitmap
extends
Object
implements
Parcelable
答案是肯定的,Intent在传递数据时是有大小限制的,这里官方并未详细说明,不过通过实验的方法可以测出数据应该被限制在1MB之内(1024KB),笔者采用的是传递Bitmap的方法,发现当图片大小超过1024(准确地说是1020左右)的时候,程序就会出现闪退、停止运行等异常(不同的手机反应不同),因此可以判断Intent的传输容量在1MB之内。
传递大容量数据时:
在Activity或者组件之前传递信息时,一般采用intent绑定bundle的方式传值,但在使用过程中需要注意的是不要用bundle传递大容量数据:
传输一般的数据参数不会用到这么大的数据量,因此intent符合除图片之外的大部分使用场景,请放心使用吧。如果想传递图片那么建议使用其他方式,附录里提供了三种传递图片的方式。
附1:Android中传递图片的三种方式:
1. 如果是本地res中的资源文件可以用intent.putExtra("id", R.id.xxx);传递一个对应的id过去。在新activity中通过id取出图片。getResources().getDrawable(R.id.xxx);
2. 如果不是本地资源文件或者adapter中没有存储id,可以把drawable转为bitmap,用intent.putExtra("bitmap", bitmap);传递过去。因为intent只能传递实现序列化的类,即继承java 的Serializable接口或者android的Parcelable接口。drawable没有实现该接口所以不能传递。
3. 如果是通过线程什么的从网上拉取的图片,可以定义一个下载的工具类,并定义一个static的静态Map集合,每拉取成功一张图片就把该图片存入Map中作为缓存。key是该图片的拉取地址。然后通过intent把地址传递过去。在新activity中通过该工具类取得静态map,并通过传递过来的地址中map中取出该图片。
附2:Android中获取bitmap尺寸的方法
在不同的API版本中该方法的实现方式不一样,总的来说可以使用一下方法分别适用于api19、api12和更早的api。获得数据的单位是字节,自行转化为KB或MB。
public int getBitmapSize(Bitmap bitmap){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ //API 19
return bitmap.getAllocationByteCount();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1){//API 12
return bitmap.getByteCount();
}
return bitmap.getRowBytes() * bitmap.getHeight(); //earlier version
}附3:Intent API的中文翻译
android activity 大小限制,【Android】intent传递数据时,数据大小的限制问题相关推荐
- intent传递较大数据的解决和intent不能传递较大数据的原因
一.首先提供需要在activity之间用intent传递较大数据的方法.intent不能传递较大数据,需要传递数据的时候,写一个操作类: public class DataHelper {privat ...
- WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案
WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案 参考文章: (1)WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案 (2)https://www.cnbl ...
- Android Activity间跳转与传递数据
1 概述 Activity之间的跳转主要使用 startActivity(Intent intent); startActivityForResult(Intent intent,int reques ...
- android activity 回调函数,Android Activity的生命周期
Activity的生命周期 Android系统根据activity的所处不同阶段对应的唤起其特定的回调函数来执行代码.activity的一系列有序的生命周期回调函数.本文将来讨论下activity各阶 ...
- android activity 淡入 动画,android – 如何在Activity转换上执行淡入淡出...
您可以创建自己的.xml动画文件以淡入新活动并淡出当前活动: fade_in.xml android:interpolator="@android:anim/accelerate_inter ...
- android activity透明主题,Android应用的全透明效果--Activity及Dialog的全透明
1.Activity全透明 同学给了这个有趣的代码,现在公布出来. 先在res/values下建colors.xml文件,写入:<?xmlversion ="1.0"enco ...
- android activity 渐变,关于Android的径向渐变高级编程的实现
在最近的一系列文章,对midipad APP,有一个关于一个radialgradiant渲染每个padview利用的探讨,对审美的原因,这是一个软件层,而不是一个硬件层.在这个简短的系列中,我们首先看 ...
- android activity滑动切换,Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果...
[实例简介] Android 向右滑动切换Activity, 随着手势的滑动而滑动的效果,项目详情http://blog.csdn.net/xiaanming/article/details/2093 ...
- android activity pause,关于android:onPause()和onStop()在Activity中
我是Android开发的新手,但我仍然无法理解活动中的onPause()和onStop()方法. 在我的应用程序中,我有一个名为Counter的静态类,该类将变量的状态保存在应用程序的内存中.我的应用 ...
- android activity 通知 service,android activity和service通信问题
首先,题主有个理解错误的地方, startService 只是开启 service ,service运行在后台,还是有可能因内存不足而被杀死. 第二点, service 可以以混合启动的形式启动,也就 ...
最新文章
- Web服务器捉虫速记
- 项目经济规模的估算方法_估算英国退欧的经济影响
- yii不能没有提示验证错误信息_安装Mac系统时提示”应用程序副本不能验证 它在下载过程...”的解决方法...
- JVM程序计数器,虚拟机栈,本地方法栈
- 最优化学习---从解方程到最优化1
- AutoDWG DWG 转换 PDF 控制组件-ActiveX
- Algorithm:数学建模大赛(CUMCM/NPMCM)之05A《长江水质综合评价与预测》
- 浅谈IPv4/IPv6转换技术
- 2022怎么注册谷歌?手机号无法用于验证谷歌Gmail的成功解决方法
- 无法远程连接到计算机 虚拟内存,远程桌面连接显示内存不足怎么破?
- 保存数据时报:Incorrect string value: '\xF0\x9F\x91\x8D' for column 'f_char_name' at row 1
- 转载-Android 前沿UI
- Jenkins:設定一次後就很方便的排程工具
- 电源系统优化设计,低压差稳压器(LDO)如何选型?
- 360以安全之名做搜索,可信,还是欺世盗名?
- Android之手机文件夹目录详解
- 揭秘华为标准岗位工资(天涯)
- Android开发常用框架
- python爬虫工程师 成长之路八 Selenium WebDriver
- python turtle rgb模式 bad color sequence**错误