2015-06-02 68 views
0

我正在創建一個佈局位圖。它在大多數設備上工作正常,但是在少數三星設備中,其投擲OOM。下面是我用於將佈局轉換爲位圖的代碼從視圖創建位圖時的Android OOM

private void enableViewCache() { 
    viewToConvert.setDrawingCacheEnabled(true); 
    viewToConvert.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.AT_MOST), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.AT_MOST)); 
    viewToConvert.buildDrawingCache(true); 
} 

public Bitmap getBitmapFromView() { 

    Bitmap b = Bitmap.createBitmap(viewToConvert.getDrawingCache()); 
    viewToConvert.setDrawingCacheEnabled(false); 
    viewToConvert.destroyDrawingCache(); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    return b; 
} 

我在Bitmap.createBitmap調用中獲得了OOM。我已經檢查了stackoverflow中提到的大部分OOM位圖問題,這些問題都提到了關於使用抽樣和所有內容,但我不知道如何在此用例中實現該問題。

+0

這些舊設備?也許嘗試使用較低的壓縮質量 –

+0

OOM出現在Bitmap.createBitmap方法本身中。它主要發生在像三星s2和note這樣的舊設備上 – Kumar

回答

0

我不確定你想要完成什麼,但在大多數情況下,你不想從View中提取Bitmap。你通常想要的是在不同的地方維護位圖(LRU Cache可能?)。我的猜測是視圖的圖形緩存是問題。

無論如何,問題可能是您處理大位圖的方式。 Read this article所以你知道如何抽樣,縮小和其他技術,所以你不會得到OOM。