我动态地将20张图片添加到片段中。这里的问题是当我破坏片段并重新加载时,内存不会在销毁时删除并为20个图像添加新内存。
我的代码是:
for(int i=0;i<machImagesCursor.getCount();i++)
{
machImagesCursor.moveToPosition(i);
ImageView imageView=new ImageView(getActivity());
imageView.setId(i);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
100, 75);
imageView.setLayoutParams(layoutParams);
String imageName=machImagesCursor.getString(machImagesCursor.getColumnIndex("M_ImageName"));
String path = Environment.getExternalStorageDirectory().getPath()
+ "/fleetsyncimages/" +imageName ;
Log.d("image-path",path);
imageView.setImageURI(Uri.parse(path));
hScrollView.addView(imageView);
}
在onDestroy上
for(int i=0;i<hScrollView.getChildCount();i++)
{
ImageView iv=(ImageView)hScrollView.getChildAt(0);
// iv.setImageBitmap(null);
Drawable d = iv.getDrawable();
((BitmapDrawable) d).getBitmap().recycle();
}
在我的logcat中:堆继续增加。
提前致谢。
答案 0 :(得分:0)
不确定onDestroy()
代码是否必要,但
ImageView iv=(ImageView)hScrollView.getChildAt(0);
看起来不正确,你应该得到孩子i
,而不是0
。
您是否使用任何其他技术来保存图像?就像将它们存储在onRetainNonConfigurationInstance()
中的数组中一样。 Drawable
持有对当前Context
的引用,因此您可以在Drawable
个实例之间保留Activity
来泄露整个上下文。