2013-10-29 78 views
-1

我設置了一個位圖作爲我的背景,它工作正常,沒有錯誤。但是,當我按下後退按鈕並再次轉到具有背景的活動時,我會發現上述內存不足錯誤。當活動失去焦點時,我是否需要清除一些事情?位圖大小超過虛擬機預算內存錯誤

代碼,用於設置位圖:

BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 1; 
    options.inJustDecodeBounds = false; 
    map = BitmapFactory.decodeFile(mapFile.getAbsolutePath(), options); 

然後我使用createScaledBitmap()來設置圖像。

這種內存不足的問題只發生在我離開活動並回到它上面時。第一次它工作正常,所以我猜我正在內存中創建多個位圖圖像,但無法看到哪裏?

這裏是decodeFile()方法,如果有東西在裏面:

try { 
       // decode image size 
       BitmapFactory.Options o = new BitmapFactory.Options(); 
       o.inJustDecodeBounds = true; 
       BitmapFactory.decodeStream(new FileInputStream(f), null, o); 
       // Find the correct scale value. It should be the power of 2. 
       final int REQUIRED_SIZE = 70; 
       int width_tmp = o.outWidth, height_tmp = o.outHeight; 

       int scale = 1; 
       while (true) { 
        if (width_tmp/2 < REQUIRED_SIZE 
          || height_tmp/2 < REQUIRED_SIZE) 
         break; 
        width_tmp /= 2; 
        height_tmp /= 2; 
        scale++; 
       } 

       // decode with inSampleSize 
       BitmapFactory.Options o2 = new BitmapFactory.Options(); 
       o2.inSampleSize = scale; 
       return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
      } catch (FileNotFoundException e) { 
      } 
      return null; 
     } 

非常感謝。

回答

0

檢查有關位圖內存管理的Android training

關於您的問題,嘗試在完成位圖時調用Bitmap.recycle(),例如在onDestroy()方法中。

+0

嗨,這是我在想什麼。是onDestory()調用時,雖然我只是使用後退按鈕,然後再回到活動?我以爲它會暫停? – jonny

+0

明白了吧,回收onStop() – jonny

0

根據Android Developer

Android設備可具有小至16MB內存可用於單個應用。

基本上你的圖像正在加載,但沒有從應用程序釋放,因此留下低空間,爲什麼發生錯誤。我一直在面對這個錯誤,直到我偶然發現了一個關於如何解決它的教程。我建議遵循它的步驟。這是tutorial

相關問題