Bitmap 使用时候注意什么?

oom  oom oom重要的事情说三遍。

为了避免oom 那么我们应该怎么做呢

根据我总结的,

1,要选择合适的图片规格(bitmap类型),即:

        ALPHA_8  每个像素占用1byte内存

        ARGB_4444 每个像素占用2byte内存

        ARGB_8888 每个像素占用4byte内存  不设置的话默认这个。

        RGB_565 每个像素占用2byte内存

2,降低采样率。BitmapFactory.Options 参数inSampleSize的使用,先把options.inJustDecodeBounds设为true,只是去读取图片的大小,在拿到图片的大小之后和要显示的大小做比较通过calculateInSampleSize()函数计算inSampleSize的具体值,得到值之后。options.inJustDecodeBounds设为false读图片资源。

3,复用内存。即,通过软引用(内存不够的时候才会回收掉),复用内存块,不需要在重新给这个bitmap申请一块新的内存,避免了一次内存的分配和回收,从而改善了运行效率。

当一个Bitmap从内存缓存中移除掉的时候,把这个Bitmap加入到复用的Set集合里面去。判断是否有Bitmap可以复用的时候先去这个集合里面拿到Bitmap,然后按照复用图片的规则(Android4.4以下的平台,需要保证inBitmap和即将要得到decode的Bitmap的尺寸规格一致,Android4.4及其以上的平台,只需要满足inBitmap的尺寸大于要decode得到的Bitmap的尺寸规格即可)判断是否可以复用。

4,及时回收。即,recycle。

5,压缩图片。compress。

6,尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容