2013-05-08 61 views
0

我想用下面的代碼採取截圖:屏幕捕獲導致堆增長

final View rootView = getRootView(); 
rootView.setDrawingCacheEnabled(true); 
Bitmap bmp = Bitmap.createBitmap(rootView.getDrawingCache()); 
rootView.setDrawingCacheEnabled(false); 

一旦被捕獲,我保存的截圖在ArrayList<Bitmap>

mReporter.addBitmap(bmp); 

問題是,每一次這個整個過程執行heap增長了大量。我怎樣才能避免堆太大?

我的日誌中顯示此信息可能會有所幫助:

05-08 20:11:48.443: I/dalvikvm-heap(18497): Grow heap (frag case) to 31.288MB for 6819856-byte allocation 

編輯:

上午存儲3張圖像的最大的ArrayList中

回答

1

你不能。每次你在你的ArrayList裏存儲一個新的位圖。你可以是downsampling你的bitmap或你可以只保留幾個位圖ArrayList

+0

在任何時間點都不會保留3個以上的位圖。我會嘗試下采樣:) – JeeZ 2013-05-08 15:15:30

+0

它更好。請記住,每個位圖都需要widt x高度x 4個字節的內存。一張800x600位圖需要2MB大小。 – Blackbelt 2013-05-08 15:17:01

+0

是真的,謝謝你的解決方案 – JeeZ 2013-05-08 15:18:56

2

爲什麼你不希望堆增長?您正在爲每個屏幕截圖存儲大量信息。如果你想避免堆增長,你需要將圖像寫入SD卡或其他存儲。