具有自定义视图的ICS中的Bitmap分配的可用内存

时间:2014-03-14 10:34:55

标签: android c++ memory memory-management bitmap

1.我正在使用自定义视图。

2.我已使用我的Activity实现了自定义视图。

3.我正在完成我的活动并重建多次。

  1. 因此,它正在为创建位图重新分配内存。

  2. 如何确保每次都不重新分配新内存。

  3. 如何重用或释放已分配的Bitmap内存。

  4. 我想摆脱由于Bitmap 导致的内存泄漏。

    if (cachedBitmap == null){
      cachedBitmap = Bitmap.createBitmap(getWidth(),getHeight(), Config.ARGB_8888);
      cachedCanvas = new Canvas(cachedBitmap);
      transparentColor = new int[cachedBitmap.getWidth()*cachedBitmap.getHeight()];
    
      for(int i = 0 ; i < (int) 5 *1.5 * cachedBitmap.getHeight() ; i++) {
         transparentColor[i]  = Color.TRANSPARENT;
      }
    }
    
    drawStuff(cachedCanvas);  
    canvas.drawBitmap(cachedBitmap, 0, 0, null);
    

1 个答案:

答案 0 :(得分:0)

在早期版本的Android中,Bitmap是一个本机对象,而不是驻留在Dalvik VM中。这可能是关于内存泄漏的问题,就像你提到的那样。但是,您可以使用以下代码自行释放内存:

Bitmap bmp;    // your existing Bitmap
bmp.recycle(); // Clears the bitmap from memory
bmp = null;    // Unset it to be sure

final boolean isRecycled = bmp.isRecycled(); // Can be run to check if the
                                             // Bitmap is cleared from memory

如果以这种方式一致地清除Bitmaps,可以避免内存泄漏。参考:http://android.okhelp.cz/delete-bitmap-android-example/