2014-09-27 105 views
0

我正在捕獲屏幕,只要屏幕被觸摸,我將位圖保存在ArrayList中。避免位圖被自動回收 - Android

screen.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent arg1) { 
      count++; 
      screen.setDrawingCacheEnabled(false); 
      screen.setDrawingCacheEnabled(true); 

      Bitmap b = screen.getDrawingCache(); 
      bitmapList.add(b); 
      Log.e("Captured Image Number: ", ""+count); 
      return false; 
     } 
    }); 

然後,當我嘗試訪問位圖來保存它們時,它們不再存在,回收!
我該怎麼辦?
如果我在這裏保存,需要很長時間。
試圖轉換爲byte[]以避免回收,它也花了很長時間的預期。
我想保持它高達15fps我應該做什麼。

+1

有一件事要嘗試將每個位圖的副本存儲到數組中。使用Bitmap.copy(config,true)。 – harism 2014-09-27 11:16:43

+0

@harsim也嘗試過......沒有運氣,回收。 – Salmaan 2014-09-29 03:33:54

回答

0

將位圖存儲在類級變量中而不是臨時變量。如果您的屏幕仍然處於活動狀態,並且您的屏幕持有對位圖對象的硬引用,則不應該對其進行回收。

0

這可能爲時已晚。但是,由於目前還沒有適當的答案,所以我想在這個問題上發佈我的解決方法。我嘗試了哈里斯的回答,它需要像這樣使用。

所以,如果你有一個位圖的數組列表,首先你需要使用Bitmap.copy(Bitmap.Config config, boolean isMutable)方法保存位圖的副本。

然後,當您要使用位圖時,請不要直接使用位圖,而應使用相同的複製方法獲取位圖的副本,並且複製的位圖應該在您的應用程序中使用。

底線是一次位圖被多次使用,它將被回收。因此,我所做的是避免使用原始位圖,我採用原始位圖的副本並使用它們。