Bitmap有一个recycle方法,意思很简单,回收Bitmap的空间。但是我们知道java有自己的垃圾回收机制,所以为什么BitaMap还需要这样一个专门的回收方法呢?
无需调用bitmap的理由有:
a. 垃圾回收会处理的;
b. 当application关闭,process被杀掉,所有这个process占用的空间自然回归系统;
虽然Android有自己的垃圾回收机制,对于是不是要我们自己调用recycle,还的看情况而定。如果只是使用少量的几张图片,回收与否关系不大。可是若有大量bitmap需要垃圾回收处理,那必然垃圾回收需要做的次数就更多也发生地更频繁,会对系统资源造成负荷。所以,这个时候还是自己试用recycle来释放的比较好。
如何去使用recycle()方法和何时试用recycle()都是值得考虑的问题。否侧,极易出现下面的异常:
1
|
05-15 08:31:00.117: E/AndroidRuntime(513): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@44c093b8
|
java运行时异常:试图使用一个已经回收了的图片
只有当你确认你不会在使用这个bitmap的时候,就可以选择调用recycle()方法释放它。
其实上面说的都是废话,我觉得该不该使用recycle方法,完全取决于你自己的水平,经测,我本人不适合,因为我在自己认为bitmap已经完全不会再使用的地方调用了recycle方法结果在某些条件下还是出现了上面的异常。所以recycle方法虽好,但是你要能够驾驭,而且一般情况下是不需要他的。
注:如评论中那位仁兄所说的,以下情况如果recycle会发生错误:
当你根据id从drawable(drawable资源文件夹)中获取一个drawable时,系统会将这个drawable加入缓存之中。这样,你第二次继续获取这个drawable时,如果缓存之中的drawable没有被回收,则会被返回。
如果你通过getDrawable(id)方法获取到一个bitmap1,继续通过getDrawable(id)方法获取到一个bitmap2。那么bitmap1=bitmap2。所以,当你对bitmap1进行recycle之后,又将bitmap2设置给Imageview显示,极大可能会出现java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@xxx的错误。