我有一個Activity
在TabHost
與3其他活動。因此,這些總是存在(或處於「暫停」狀態)。回收位圖不釋放內存
第一個活動有四個不同的圖像(每個〜250kb),他們正在檢索很多內存(大約80MB)。只是指出,我加載屏幕所需的最小尺寸,如果使用layout_weight
幫助),所以我想盡量減少所需的內存量。
我已經嘗試在OnPause
狀態刪除的圖像,並重新設置他們OnResume
,但我沒有運氣,這是什麼,我試圖做一個例子:
imageView.Drawable.Callback = null;
((BitmapDrawable)imageView.Drawable).Bitmap.Recycle();
imageView.Drawable.Dispose();
imageView.SetImageDrawable(null);
imageView.SetImageBitmap(null);
GC.Collect();
我不知道刪除OnPause
上的Bitmap
是不是最好的策略,但它應該起作用。我不明白爲什麼ImageView
不會被GC回收(因爲沒有外部引用)
編輯 這是我如何加載圖像。即使將圖像放在xml文件中也不起作用。另外,我不在乎這個代碼,我只想配置這個位圖。
void SetBackgroundImages(int imageId, int resId, float width, float height) {
var imageView = FindViewById<ImageView>(imageId);
using (var bitmap = DecodeSampledBitmapFromResource(Resources, resId, width, height))
imageView.SetImageBitmap(bitmap);
}
public static Bitmap DecodeSampledBitmapFromResource(Resources res, int resId, float reqWidth, float reqHeight) {
var options = new BitmapFactory.Options {InJustDecodeBounds = true};
using (var b = BitmapFactory.DecodeResource(res,resId,options)){}
options.InSampleSize = CalculateInSampleSize(options, reqWidth, reqHeight);
options.InJustDecodeBounds = false;
return BitmapFactory.DecodeResource(res, resId, options);
}
你究竟如何加載你的圖片?簡單地告訴'ImageView'來拉伸或縮放圖像,並不意味着你正在用盡可能小的尺寸加載它。 Afaik,爲了釋放對'Bitmap'的引用,你還需要''無效''ImageView'。 – Cheesebaron
謝謝你的回覆。這不是重點,但我正在將圖片加載爲Xamarin(和Google)文檔點(http://docs.xamarin.com/recipes/android/resources/general/load_large_bitmaps_efficiently/),並獲取樣本。我試圖使ImageView失效(謝謝),但沒有區別,在OnResume中我得到一個OutOfMemmory異常... – Adam
它使用了哪些部分?請提供實際將圖像加載到視圖中的代碼。 – Cheesebaron