android bitmap 占用内存大小,drawable与bitmap内存占用大小
1, 比较Drawable与Bitmap占用内存大小
2, 比较BitmapFactory类的decodeResource方法与decodeStream方法的效率
好吧,先来看第1个测试!
以下这个是测试加载1000个Drawable对象的代码,很简单的,我就不解释了!
public class Main extends Activity
{
int number = 1000;
Drawable[] array;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
array = new BitmapDrawable[number];
for(int i = 0; i < number; i++)
{
Log.e("", "测试第" + (i+1) + "张图片");
array[i] = getResources().getDrawable(R.drawable.img);
}
}
}
下面再来看一下加载1000个Bitmap对象的代码,同样的,代码很简单的,我就不解释了!
public class Main extends Activity
{
int number = 1000;
Bitmap bitmap[];
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bitmap = new Bitmap[number];
for (int i = 0; i < number; i++)
{
Log.e("", "测试第" + (i+1) + "张图片");
bitmap[i] = BitmapFactory.decodeResource(getResources(), R.drawable.img);
}
}
}
看看上面的输出,才加载到第8张图片,程序就报错了“java.lang.OutOfMemoryError: bitmap size exceeds VM budget”。
通过上面的例子,可以看清楚地看出来,使用Drawable保存图片对象,占用更小的内存空间。
而使用Biamtp对象,则会占用很大内存空间,很容易就出现OOM了!
下面我们再来看一个例子,这个也是加载Bitmap对象。
只不过,之次不是使用BitmapFactory的decodeResource方法,
而是使用decodeStream方法,看代码。
public class Main extends Activity
{
int number = 1000;
Bitmap bitmap[];
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bitmap = new Bitmap[number];
for (int i = 0; i < number; i++)
{
Log.e("", "测试第" + (i+1) + "张图片");
bitmap[i] =BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.img));//这里换了方法
}
}
}
从上面可以看出,程序在加载到第566张的时候,就出现了OOM错误。
不过,跟第2个例子比起来,你会发现,程序可以加载更多的图片。
这说明了使用BitmapFactory的decodeResource方法会占据大量内存,
而使用使用decodeStream方法,则占据更小的内存。
从时间上来说,看看日志输出,大概估算了一下加载一张图片所需要的时间,发现,
decodeResource加载图片需要约0.17秒的时间,
而使用decodeStream方法,只需要约0.08秒的时间!
这说明了,decodeStream无论是时间上还是空间上,都比decodeResource方法更优秀!!
从上面三个例子,可以看出,用第一种方法(即用Drawable加载图片)可以加载更加的图片,加载32张图片的时间约为0.01秒!
我试着把Drawable的数量调至1000000,程序在运行时,停在了153761张图片里,手机提示,“应用程序无响应…”
个人猜测,Drawable应该不属于常驻内存的对象,不然的话,不可能不会出现OOM的~~
网上关于Drawable与Bitmap的资料太少,不能深入学习,真是遗憾~
刚才又做了个测试,把第一个例子中的
array[i] = getResources().getDrawable(R.drawable.img);
方法换成了
array[i] = Drawable.createFromStream(getResources().openRawResource(R.drawable.img), null);
结果和第三个例子一样,在第566张图片中,出现了OOM错误!
而且,加载的时间都是一样~~
这样一来,我就更加迷惑了~~
android bitmap 占用内存大小,drawable与bitmap内存占用大小相关推荐
- android 加载网络图片,并压缩bitmap内存大小
/*** 根据图片的url路径获得Bitmap对象, 有压缩效果的,占用内存小了,* @param url* @return*/public static Bitmap returnBitmap(St ...
- Bitmap对象在内存中的大小和转化为字节流的大小
查看我的博客原文:Android – Bitmap 内存管理 Bitmap对象在内存中的大小 比如我们构造Bitmap时设置宽200,高400,色彩模式为Bitmap.Config.ARGB_8888 ...
- Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file
file转bitmap File param = new File(); Bitmap bitmap= BitmapFactory.decodeFile(param.getPath()); drawa ...
- 【Android】图像中Drawable向Bitmap的两种转换方法
Drawable和Bitmap转换 方法一: private void drawableToBitamp(Drawable drawable){int w = drawable.getIntrinsi ...
- android 获取资源文件 r.drawable中的图片转换为drawable、bitmap
1.R-Drawable 1 Resources resources = mContext.getResources(); 2 Drawable drawable = resources.getDra ...
- Android(四十二):Drawable 转 Bitmap
源码 /// <summary> /// Drawable 转 Bitmap /// </summary> /// <param name="drawable& ...
- Android系统性能优化(71)---关于Bitmap图片资源优化的小事
Android性能优化:那些关于Bitmap图片资源优化的小事 前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的Bitmap 使用优化,希望你们会喜欢 目录 1. 优化原 ...
- java map 内存分配_Android O Bitmap 内存分配
我们知道,一般认为在Android进程的内存模型中,heap分为两部分,一部分是native heap,一部分是Dalvik heap(实际上也是native heap的一部分). Android B ...
- bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方法
2019独角兽企业重金招聘Python工程师标准>>> 我们都知道Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOf ...
最新文章
- 【转载】rpc.rstatd安装与配置
- Shell-bash
- Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...
- mysql数据库恢复数据_【技术分享】使用Innodb存储引擎的mysql数据库恢复
- Elasticsearch Java 操作client
- workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
- 基础测试题(字符串、列表、元组、字典)
- 1225 数数字
- UnboundLocalError: local vaiable 'XX' reference...
- 扫盲——敏捷开发 Agile development 之 Scrum开发
- 【ML小结8】降维与度量学习(KNN、PCA、因子分析、LDA)
- 朗文3000词汇表带音标_牛津3000词汇表
- RabbitMQ heartbeat原理
- 免费WebAR与小程序AR制作平台推荐
- Windows获取本机公网ip脚本
- 循环(环形)缓冲区之Boost::circular_buffer
- 使用Webpack构建SPA模式的多页面应用(基于Vue 2)
- windows下安装字体到linux服务器
- ldpc译码讲解_LDPC码编译码原理及应用
- win7 正在锁定计算机 卡住,win7关机关不掉怎么办_win7一直卡在关机的解决办法
热门文章
- 深度学习100例 | 第26天-卷积神经网络(CNN):乳腺癌识别
- Python入门100题 | 第058题
- LeetCode题组:第169题-多数元素
- 老司机也晕车--java字符串String晕车之旅
- A Step By Step Guide to Tomcat Performance Monitoring【转】
- mmTrix大数据分析平台构建实录--转
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载...
- TCP、UDP以及HTTP的简单讲解
- 【模型迭代】拒绝推断(RI)
- 2018.11:大数据在政府统计中的应用、瓶颈及融合路径(余芳东)