WEB开发网
开发学院手机开发Android 开发 Android应用开发中对Bitmap的内存优化 阅读

Android应用开发中对Bitmap的内存优化

 2012-09-07 12:27:52 来源:WEB开发网   
核心提示: 一般来说,如果能够获得Bitmap对象的引用,Android应用开发中对Bitmap的内存优化(2),就需要及时的调用Bitmap的recycle()方法来释放Bitmap占用的内存空间,而不要等Android系统来进行释放,而不是Exception,在此仅仅做一下提醒,下面是释放Bitmap的示例代码片段,
 
一般来说,如果能够获得Bitmap对象的引用,就需要及时的调用Bitmap的recycle()方法来释放Bitmap占用的内存空间,而不要等Android系统来进行释放。
下面是释放Bitmap的示例代码片段。
// 先判断是否已经回收
if(bitmap != null && !bitmap.isRecycled()){ 
     // 回收并且置为null
     bitmap.recycle(); 
     bitmap = null; 
System.gc();
 
从上面的代码可以看到,bitmap.recycle()方法用于回收该Bitmap所占用的内存,接着将bitmap置空,最后使用System.gc()调用一下系统的垃圾回收器进行回收,可以通知垃圾回收器尽快进行回收。这里需要注意的是,调用System.gc()并不能保证立即开始进行回收过程,而只是为了加快回收的到来。
如何调用recycle()方法进行回收已经了解了,那什么时候释放Bitmap的内存比较合适呢?一般来说,如果代码已经不再需要使用Bitmap对象了,就可以释放了。释放内存以后,就不能再使用该Bitmap对象了,如果再次使用,就会抛出异常。所以一定要保证不再使用的时候释放。比如,如果是在某个Activity中使用Bitmap,就可以在Activity的onStop()或者onDestroy()方法中进行回收。
 
2) 捕获异常
因为Bitmap是吃内存大户,为了避免应用在分配Bitmap内存的时候出现OutOfMemory异常以后Crash掉,需要特别注意实例化Bitmap部分的代码。通常,在实例化Bitmap的代码中,一定要对OutOfMemory异常进行捕获。
以下是代码示例。
Bitmap bitmap = null;
try {
   // 实例化Bitmap
   bitmap = BitmapFactory.decodeFile(path);
} catch (OutOfMemoryError e) {
   //
}
if (bitmap == null) {
   // 如果实例化失败 返回默认的Bitmap对象
   return defaultBitmapMap;
}
 
这里对初始化Bitmap对象过程中可能发生的OutOfMemory异常进行了捕获。如果发生了OutOfMemory异常,应用不会崩溃,而是得到了一个默认的Bitmap图。
 
经验分享:
   很多开发者会习惯性的在代码中直接捕获Exception。但是对于OutOfMemoryError来说,这样做是捕获不到的。因为OutOfMemoryError是一种Error,而不是Exception。在此仅仅做一下提醒,避免写错代码而捕获不到OutOfMemoryError。

上一页  1 2 3 4  下一页

Tags:Android 应用开发 Bitmap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接