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内存占用大小相关推荐

  1. android 加载网络图片,并压缩bitmap内存大小

    /*** 根据图片的url路径获得Bitmap对象, 有压缩效果的,占用内存小了,* @param url* @return*/public static Bitmap returnBitmap(St ...

  2. Bitmap对象在内存中的大小和转化为字节流的大小

    查看我的博客原文:Android – Bitmap 内存管理 Bitmap对象在内存中的大小 比如我们构造Bitmap时设置宽200,高400,色彩模式为Bitmap.Config.ARGB_8888 ...

  3. Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file

    file转bitmap File param = new File(); Bitmap bitmap= BitmapFactory.decodeFile(param.getPath()); drawa ...

  4. 【Android】图像中Drawable向Bitmap的两种转换方法

    Drawable和Bitmap转换 方法一: private void drawableToBitamp(Drawable drawable){int w = drawable.getIntrinsi ...

  5. android 获取资源文件 r.drawable中的图片转换为drawable、bitmap

    1.R-Drawable 1 Resources resources = mContext.getResources(); 2 Drawable drawable = resources.getDra ...

  6. Android(四十二):Drawable 转 Bitmap

    源码 /// <summary> /// Drawable 转 Bitmap /// </summary> /// <param name="drawable& ...

  7. Android系统性能优化(71)---关于Bitmap图片资源优化的小事

    Android性能优化:那些关于Bitmap图片资源优化的小事 前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的Bitmap 使用优化,希望你们会喜欢 目录 1. 优化原 ...

  8. java map 内存分配_Android O Bitmap 内存分配

    我们知道,一般认为在Android进程的内存模型中,heap分为两部分,一部分是native heap,一部分是Dalvik heap(实际上也是native heap的一部分). Android B ...

  9. bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方法

    2019独角兽企业重金招聘Python工程师标准>>> 我们都知道Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOf ...

最新文章

  1. 【转载】rpc.rstatd安装与配置
  2. Shell-bash
  3. Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...
  4. mysql数据库恢复数据_【技术分享】使用Innodb存储引擎的mysql数据库恢复
  5. Elasticsearch Java 操作client
  6. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
  7. 基础测试题(字符串、列表、元组、字典)
  8. 1225 数数字
  9. UnboundLocalError: local vaiable 'XX' reference...
  10. 扫盲——敏捷开发 Agile development 之 Scrum开发
  11. 【ML小结8】降维与度量学习(KNN、PCA、因子分析、LDA)
  12. 朗文3000词汇表带音标_牛津3000词汇表
  13. RabbitMQ heartbeat原理
  14. 免费WebAR与小程序AR制作平台推荐
  15. Windows获取本机公网ip脚本
  16. 循环(环形)缓冲区之Boost::circular_buffer
  17. 使用Webpack构建SPA模式的多页面应用(基于Vue 2)
  18. windows下安装字体到linux服务器
  19. ldpc译码讲解_LDPC码编译码原理及应用
  20. win7 正在锁定计算机 卡住,win7关机关不掉怎么办_win7一直卡在关机的解决办法

热门文章

  1. 深度学习100例 | 第26天-卷积神经网络(CNN):乳腺癌识别
  2. Python入门100题 | 第058题
  3. LeetCode题组:第169题-多数元素
  4. 老司机也晕车--java字符串String晕车之旅
  5. A Step By Step Guide to Tomcat Performance Monitoring【转】
  6. mmTrix大数据分析平台构建实录--转
  7. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载...
  8. TCP、UDP以及HTTP的简单讲解
  9. 【模型迭代】拒绝推断(RI)
  10. 2018.11:大数据在政府统计中的应用、瓶颈及融合路径(余芳东)