0

我正在向片段动态添加 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 中: 堆不断增加。

提前致谢。

4

1 回答 1

0

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

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

似乎不正确,你应该得到 child i,而不是0一直。

您是否使用任何其他技术来保存图像?就像将它们存储在onRetainNonConfigurationInstance(). Drawables 持有对 current 的引用,因此您可以通过在实例之间保留 sContext来泄漏整个上下文。DrawableActivity

于 2013-06-06T11:45:55.760 回答