,並將其分配給一個變量:Android的創建對象和內存
Obj obj1 = null;
obj1 = myFunction(params);
(這裏myFunction
創建一個複雜的對象)
,我稍後重新分配變量:
obj1 = myFunction(otherparams);
在那一刻發生內存泄漏,因爲我沒有銷燬先前的對象?
這是真實的情況:
Bitmap bmp;
bmp = drawMyBitmap(3);
//... some code
bmp = drawMyBitmap(4);
將內存泄漏發生在這裏?
五言中,我知道我必須調用bmp.recycle
,但我不能這樣做,因爲真正的代碼如下:
Bitmap bmp;
bmp = drawMyBitmap(3);
imageView.setImageBitmap(bmp);
//... some code
// if I try to do recycle here - I receive java.lang.IllegalArgumentException: Cannot draw recycled bitmaps
// But I need to recreate bitmap every some minutes
bmp = drawMyBitmap(4);
imageView.setImageBitmap(bmp);
所以,我怎麼能回收的位圖和避免內存泄漏?
爲什麼不創建一個臨時變量來保存前一個位圖,並且在新的setImageBitmap調用之後,您是否回收了temp變量? (可能是因爲Bitmap不再繪製)或者真正的代碼太複雜了? – Astrorvald
請解釋....我每次都得到信息。之後,我繪製位圖並將此位圖設置爲ImageView。我想用Rotate事件顯示這個位圖(因爲你知道它重新創建Activity) - 所以位圖將是靜態的。 – klvd
我不認爲這應該已經關閉。我編輯了這個問題,試圖讓它更清楚。 –