Android 在使用Bitmap的时候为啥要手动调用recycle方法呢?

http://blog.chinaunix.net/uid-20771867-id-3351053.html


我们知道手机的内存有限,而图片所占的内存往往又很大。所以在处理图片的时候可以在服务端或者客户端提前将图片处理一下,减少其体积。另外使用Bitmap的时候可以使用SoftReference来及时释放资源。但是看到好多程序还是主动地调用Bitmap对象的recycle方法来释放资源。可能我们就有疑问了:不是java会自动回收内存吗,那干吗还要手动地去回收?
        要解决这个问题,我们得去看看recycle的源码:

点击(此处)折叠或打开

  1. public void recycle() {
  2.         if (!mRecycled) {
  3.             mBuffer = null;
  4.             nativeRecycle(mNativeBitmap);
  5.             mNinePatchChunk = null;
  6.             mRecycled = true;
  7.         }
  8.     }
         通过看源码,我们会发现,这个方法首先将这个Bitmap的引用置为null,然后调用了nativeRecycle(mNativeBitMap)方法,这个方法很明显是个JNI调用,会调用底层的c或者c++代码就可以做到对该内存的立即回收,而不需要等待那不确定啥时候会执行的GC来回收了。
    
         当然如果用的图片很少,占用的内存也很少的时候就没有必要手动调用recycle方法来回收内存了,GC会在合适的时候回收这些内存的。只有图片很多占用内存很多的时候才需要我们主动调用recycle方法,否则很有可能出现OOM异常的。


你可能感兴趣的:(Android)