首页 Android中一张图片加载后所占用内存大小的获取与测试_0

Android中一张图片加载后所占用内存大小的获取与测试_0

举报
开通vip

Android中一张图片加载后所占用内存大小的获取与测试_0Android中一张图片加载后所占用内存大小的获取与测试_0 Android中一张图片加载后所占用内存大小的获取与测试 打弹弓技巧|弹弓打法|弹弓视频 Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃。这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制,有16M,64M,128M,256M等等,,另一方面是因为Android系统对于图片资源的垃圾回收比较慢,文章中对Android源码进行了分析,发现Android的setImageViewBit...

Android中一张图片加载后所占用内存大小的获取与测试_0
Android中一张图片加载后所占用内存大小的获取与测试_0 Android中一张图片加载后所占用内存大小的获取与测试 打弹弓技巧|弹弓打法|弹弓视频 Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃。这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制,有16M,64M,128M,256M等等,,另一方面是因为Android系统对于图片资源的垃圾回收比较慢,文章中对Android源码进行了分析,发现Android的setImageViewBitmap,Bitmap bm,方法的源码中没有建立新的bitmap,而是用引用的方式来使用bm的,这就导致bm被多处引用,。 那一幅图片占用的内存大概多大呢?这篇博文主要是 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 了我在测试一副图片占用字节数时查阅的一些资料和测试结果。1.图片的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示方法 Android的Bitmap.Config给出了bitmap的一个像素所对应的存储方式,有RGB_565,ARGB_8888,ARGB_4444,ALPHA_8四种。RGB_565表示的是红绿蓝三色分别用5,6,5个比特来存储,一个像素占用了5+6+5=16个比特。RGB_8888表示红绿蓝和半透明分别用8,8,8,8个比特来存储,一个像素占用了8+8+8+8=32个比特。这样的话如果图片是以RGB_8888读入的,那么占用内存的大小将是RGB_565读入方式的2倍。 通常我们给Imagview加载图片是通过setDrawable或者在xml文件中用android:src来设置,从BitmapFactory.Options.inPreferredConfig的说明文档可以看出,默认的加载图片大小的方式是以RGB_8888读入的。2.获取bitmap占用的字节数 API 12以上可以直接获取,以下则是通过获取高和行所占字节相乘得到的。protected int sizeOf(Bitmap data) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) { return data.getRowBytes() * data.getHeight(); } else { return data.getByteCount(); } } 来源:以RGB_565方式读入图片 public Bitmap readBitMap(Context context, int resId){ BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; //获取资源图片 InputStream is = context.getResources().openRawResource(resId); return BitmapFactory.decodeStream(is,null,opt); }参考: 获取ImageView和其 中drawable的大小 获取ImageView和其中drawable大小需要在 onWindowFocusChanged获取,在oncreate中返回的结果是0.public void onWindowFocusChanged(boolean hasFocus){ ImageView imageView=(ImageView)findViewById(R.id.test1); Log.v(“Testresult”,”width= “+imageView.getWidth()+” height= “ +imageView.getHeight()); Log.v(“Testresult”,”drawawidth= “+imageView.getDrawable().getBounds().width()+ “ drawableheight= “ +imageView.getDrawable().getBounds().height()); }参考:,,中的测试代码protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView=(ImageView)findViewById(R.id.test1); Drawable drawable = imageView.getDrawable(); int bitmapWidth = drawable.getIntrinsicWidth(); //this is the bitmap’s width int bitmapHeight = drawable.getIntrinsicHeight(); //this is the bitmap’s height Log.v(“Testresult”,”bitmapwidth= “ +bitmapWidth+” bitmapHeight= “+bitmapHeight); Bitmap bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) { Log.v(“Testresult”,”bitmap bytes are”+bitmap.getRowBytes()*bitmap.getHeight()); } else { Log.v(“Testresult”, “bitmap bytes are”+bitmap.getByteCount()); } bitmap=readBitMap(this, R.drawable.pic_1000_562); //api 12之上可以直 接获取bitmap所占用的字节数 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) { Log.v(“Testresult”,”bitmap bytes are”+bitmap.getRowBytes()*bitmap.getHeight()); } else { Log.v(“Testresult”, “bitmap bytes are”+bitmap.getByteCount()); } }6.测试结 果 其中原图片大小是1000*562,手机屏幕的分辨率是480*800.从图中可以看出,采用 android:src的加载方式占用的字节数是采用RGB_565加载方式的2倍。且 1124000=2*1000*562字节。并且虽然在手机中显示的时候bitmap被缩小显示了,但是 drawable的长宽所占字节是和图片的尺寸相一致的。
本文档为【Android中一张图片加载后所占用内存大小的获取与测试_0】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_721103
暂无简介~
格式:doc
大小:16KB
软件:Word
页数:3
分类:生活休闲
上传时间:2018-11-06
浏览量:20