Android 如何在回收了ImageView的可绘制视图后重新使用它?

Android 如何在回收了ImageView的可绘制视图后重新使用它?,android,Android,我有很多图像的gridview,我可以在这个gridview中显示不同的图像组,这些图像可以通过按一些按钮进行更改。为了防止使用大量内存,我在更改图像组后回收所有下载的图像。类似这样的内容: 我的适配器为视图加载图像,并将它们传输到视图中。更改图像组后,我调用方法recycleImages()来回收所有保存的图像 public class DataArrayAdapter<T extends View & DataListViewItem> extends ArrayAdap

我有很多图像的gridview,我可以在这个gridview中显示不同的图像组,这些图像可以通过按一些按钮进行更改。为了防止使用大量内存,我在更改图像组后回收所有下载的图像。类似这样的内容:
我的适配器为视图加载图像,并将它们传输到视图中。更改图像组后,我调用方法recycleImages()来回收所有保存的图像

public class DataArrayAdapter<T extends View & DataListViewItem> extends ArrayAdapter<DataObject>
{

    //Loaded images. Key - position, value - image
    private SparseArray<Drawable> mImages;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        T view = (T) convertView;

        if (view == null) {
            view = createView(position);
        } else {
            //reuse view by transfering new data to it
            view.updateListViewItem(getItem(position));
        }

        checkViewImage(view, position);
        return view;
    }

    protected void checkViewImage(T view, int position) {
        if (view.needImage()) {
            if (mImages == null) {
                mImages = new SparseArray<Drawable>();
            }

            Drawable image = mImages.get(position);

            if (image == null) {
                String imageUrl = getItem(position).getUrl();

                if (imageUrl != null) {
                    //download image and put it to view after download
                    ImageRequest imageRequest = new ImageRequest(imageUrl, view);
                    imageRequest.send();
                }
            } else {
                view.setImageDrawable(image);
            }
        }
    }

    public void recycleImages() {
        if (mImages != null) {
            Drawable drawable;
            for (int i = 0, l = mImages.size(); i < l; ++i) {
                drawable = mImages.valueAt(i);
                if (drawable instanceof BitmapDrawable) {
                    ((BitmapDrawable) drawable).getBitmap().recycle();
                }
            }
            mImages.clear();
        }
    }

}

加载所有图像后,会对所有创建的ViewHolder对象调用方法combine,以便在一瞬间绘制所有图像

下载图像时是否尝试使用占位符位图而不是null?不幸的是,这对我没有帮助。你能共享你的
图像请求
代码吗?我的问题已编辑完毕
protected void onPostExecute(Drawable image) {
    mHolders.add(new ViewHolder(mView, image));
    checkLoaders();
}


private class ViewHolder {
    private T mView;
    private Drawable mImage;

    public ViewHolder(T view, Drawable image) {
        mView = view;
        mImage = image;
    }

    public void combine() {
        if (mView != null) {
            mView.setImageDrawable(mImage);
            mView = null;
            mImage = null;
        }
    }
}