我正在从下面这个片段中的FrameLayout和Bitmap上泄漏内存。在framelayout上有弱引用是明智的吗?我想知道如何执行它。 holder.image我应该使用弱引用吗?我使用Universal-Image-Loader来加载大图像。
One instance of "android.widget.FrameLayout" loaded by "<system class loader>" occupies 1,786,072 (13.27%) bytes. The memory is accumulated in one instance of "byte[]" loaded by "<system class loader>".
Keywords
android.widget.FrameLayout
byte[]
43 instances of "android.graphics.Bitmap", loaded by "<system class loader>" occupy 1,897,648 (14.10%) bytes.
Biggest instances:
•android.graphics.Bitmap @ 0x40e73900 - 1,048,656 (7.79%) bytes.
•android.graphics.Bitmap @ 0x40e79280 - 281,960 (2.09%) bytes.
Keywords
android.graphics.Bitmap
片段
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//final View view;
context = getActivity();
holder hold = new holder();
View view = (FrameLayout) getActivity().getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
//int imageWidth = loadedImage.getWidth();
//int imageHeight = loadedImage.getHeight();
if (convertView == null) {
//view = (LinearLayout) inflaterr.inflate(R.layout.item_grid_image, parent, false);
hold.image = (ImageView)view.findViewById(R.id.image);
} else {
view = (View) convertView;
hold.image = (ImageView)view.findViewById(R.id.image);
imageLoader.displayImage(values.get(position).get("imagePath").toString(),
hold.image, options, animateFirstListener );
}
class holder
{
ImageView image;
}
答案 0 :(得分:1)
即使您没有使用FrameLayout
,也总是在膨胀新的convertView != null
。仅在convertView
为空时才对其进行充气。
此外,Android开发者网站上managing bitmap memory上有一个很好的资源。
编辑:
取自readme at Android-Universal-Image-Loader project:
如果您经常使用Universal Image在应用中获得OutOfMemoryError Loader然后尝试下一个(所有这些或几个):
减少配置中的线程池大小(.threadPoolSize(...))。建议使用1 - 5。
在显示选项中使用.bitmapConfig(Bitmap.Config.RGB_565)。 RGB_565中的位图消耗的内存比ARGB_8888少2倍。
在配置中使用.memoryCache(new WeakMemoryCache())或在显示选项中禁用内存中的缓存(不要调用
.cacheInMemory())。在显示选项中使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)。或者尝试.imageScaleType(ImageScaleType.EXACTLY)。
避免使用RoundedBitmapDisplayer。它使用ARGB_8888配置创建新的Bitmap对象,以便在工作期间显示。