0%

Bitmap 内存释放问题

Bitmap 是一个吃内存的大家伙,所以我们需要养成一个好的习惯,才能更好的驾驭 Bitmap,让其对内存的占用变得合理起来。在这里,主要说明一下:什么时候需要释放 Bitmap,如何释放 Bitmap 占用的内存。

当 Bitmap 不再需要使用时,我们应该回收它占用的内存,如果我们直接把指向 Bitmap 的引用置 null 的话,这样 bitmap 还是会存在内存中,直到 GC 机制起作用时,才可能会把这个 bitmap 回收。这样并不能达到我们想要的目标,及时释放掉这份没用的内存。那么,释放的方法很简单:

1
2
bm.recycle ();	// 回收 bitmap 的内存 
bm = null;

此时就能够回收没用的 bitmap 占用的内存了。

另外,在这里也介绍一下简单的 ImageView 的优化,使用 ImageView 时,如果要显示的图片很大,达到 1M 甚至更大,而需要展示在屏幕上的宽高并不大。那么直接把这个图片设置给 ImageView 将会造成不必要的内存浪费。此时,就可以使用以下方法来优化了:

1
2
3
4
5
6
imageView = new ImageView(mContext);
// 按实际的大小生成的 Bitmap
Bitmap bm = BitmapFactory.decodeResource (mContext.getResources (), mImageIds [arg0]);
bm = Bitmap.createScaledBitmap (bm, width, height, false);
// 给 ImageView 设置资源
imageView.setImageBitmap (bm);

先把图片读出来生成 Bitmap 对象,然后再把这个对象进行宽高缩小,把它的实际宽高缩小成我们指定的宽高,这个宽高可以是你 ImageView 的实际宽高,这样就能够使到要展示的图在 ImageView 中显示不会失真,也能够使其占用的内存降低,达到优化内存的目的。当然,在我们不再需要这张图片 Bitmap 时,我们就可以使用前面讲到的方法释放掉 Bitmap 占用的内存了。

转载自 《Bitmap 的使用习惯 —— 及时释放 Bitmap 占用的内存》

欢迎关注我的其它发布渠道