Bitmap图片占用内存计算:
Bitmap图片在加载到内存的时候是按照:宽像素点位数来计算的。你可以把图片看成是由width行、height列的矩阵组成,每一个矩阵元素代表一个像素点,每一个像素点都是1byte整数倍的数据,这个数据越大,表示的色彩就越丰富,图片的显示质量就越高。Bitmap中有一个枚举类Config用来配置图片的压缩格式,代表每个像素是用多大的数据来存储的,数值越大能够存储的颜色信息就越多,也就越丰富,显示效果也就越好。Config.ALPHA_8是1 byte,Config.RGB_565和Config.ARGB_4444都是2 bytes,Config.RGB_565没有Alpha值所以多用来配置没有透明度的图片,Config.ARGB_8888是4 bytes,一般图片都是按照这个来配置的。下面是获取配置的代码:

static int getBytesPerPixel(Config config) {     if (config == Config.ARGB_8888) {         return 4;     } else if (config == Config.RGB_565) {         return 2;     } else if (config == Config.ARGB_4444) {         return 2;     } else if (config == Config.ALPHA_8) {         return 1;     }      return 1;  } 

android图片导致内存溢出的问题:

1、android系统自身的问题。
android系统给每一个应用分配了一定的内存空间,分配了多少要看厂家和机型,数值可以通过Runtime类获取,Runtime.getRuntime()获取实例,然后通过maxMemory()方法获取系统可为APP分配的最大内存,totalMemory() 获取APP当前所分配的内存heap空间大小,freeMemory()获取当前可用的内存,当被耗尽时会自动扩张,但是不会超过maxMemory。

2、需要多大的照片。
很多图片其实在手机上显示的时候不需要完全把原图加载到内存中,比如我手机相机拍了一张照片是42083120的,加载到内存中占用的内存就是52M,这是很恐怖的,两张照片差不多就把你的app内存给耗光了。一般情况下你都需要对需要加载的图片进行处理,这个处理主要是减小图片尺寸,降低分辨率,比如你的控件显示就是100100的大小,那你就要把图片缩小到100*100。

3、及时释放内存。
安卓2.3.3(API级别10)之前,Bitmap像素数据和Bitmap对象是分开存储的,像素数据是存储在native memory中,对象存储在Dalvik heap中,native memory中的像素数据不是以一种可预见的方式释放,可能导致应用程序暂时超过其内存限制和崩溃,所以在Android2.3.3(API 10)之前你必须要调用recycle()方法来释放掉内存避免出现OOM,当然前提是确定这个bitmap不再使用,否则会出现 “Canvas: trying to use a recycled bitmap”. 在Android3.0(API 11)之后,Bitmap的像素数据和Bitmap对象一起存储在Dalvik heap中,所以我们不用手动调用recycle()来释放Bitmap对象,内存的释放都交给垃圾回收器来做。


欢迎一起交流讨论
群号:469890293


关注我的公众号,更多优质文章将通过公众号推送。
微信扫一扫下方二维码即可关注:

更多相关文章

  1. Android(安卓)>> 27. Android(安卓)Studio 9-Patch 图片制作以及
  2. Android进阶练习 - 高效显示Bitmap(高效加载较大的 Bitmaps)
  3. Android拍照或从系统相册获取图片
  4. Android(安卓)窗帘(Curtain)效果二之波浪式动态扭曲效果
  5. Android性能优化之三级缓存
  6. android 自定义图片合集(自定义控件)
  7. 《Android群英传》读书笔记(6)第六章:Android绘图机制与处理技巧之
  8. Android网易顶部导航栏(用ActivityGroup实现动态加载)
  9. Android把svg图片转为jpg保存到相册图库

随机推荐

  1. Android(安卓)添加系统服务
  2. Android应用开发UI(自动提示)自动补全
  3. android抓取网络数据包工具
  4. Android中picasso图片缓存
  5. Android(安卓)IPC 通讯机制源码分析
  6. Android应用开发UI(单选框)
  7. 【android中级】之android 背景圆角和图
  8. Android(安卓)init初始化程序分析
  9. 去掉所有Activity界面的标题栏、强制横屏
  10. cocos2dx 3.3final 编译Android(安卓)平