如何在android中删除动态添加图像的内存

时间:2013-06-06 11:40:46

标签: android

我动态地将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中:堆继续增加。

提前致谢。

1 个答案:

答案 0 :(得分:0)

不确定onDestroy()代码是否必要,但

ImageView iv=(ImageView)hScrollView.getChildAt(0);

看起来不正确,你应该得到孩子i,而不是0

您是否使用任何其他技术来保存图像?就像将它们存储在onRetainNonConfigurationInstance()中的数组中一样。 Drawable持有对当前Context的引用,因此您可以在Drawable个实例之间保留Activity来泄露整个上下文。