Android 长ListActivity上的内存不足

Android 长ListActivity上的内存不足,android,Android,我对ListActivity有一个问题,它加载一个搜索结果,每次加载5个项目,当它达到大约45个项目时,它抛出一个内存不足异常 我从web服务器异步加载图像。如果我对此进行评论,我可以毫无问题地滚动到列表的底部(大约58项)。我知道我应该调用bitmap.Recycle()来gc我不再使用的位图,但我找不到什么时候应该调用它 class ImageLoadingTask extends AsyncTask<String, Void, Bitmap> { private

我对ListActivity有一个问题,它加载一个搜索结果,每次加载5个项目,当它达到大约45个项目时,它抛出一个内存不足异常

我从web服务器异步加载图像。如果我对此进行评论,我可以毫无问题地滚动到列表的底部(大约58项)。我知道我应该调用bitmap.Recycle()来gc我不再使用的位图,但我找不到什么时候应该调用它

class ImageLoadingTask extends AsyncTask<String, Void, Bitmap> {
        private final WeakReference<ImageView>  imageViewReference;
        String                                  url;

        public ImageLoadingTask(ImageView imageView) {
            imageViewReference = new WeakReference<ImageView>(imageView);
            imageViewReference.get().setImageDrawable(null);
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            if (isCancelled()) {
                result = null;
            }
            if (imageViewReference != null) {
                ImageView imageView = imageViewReference.get();
                if (imageView != null) {                        
                    imageView.setImageBitmap(result);
                    //result.recycle();
                }
            }
        }

        @Override
        protected void onPreExecute() {
            if (imageViewReference != null) {
                ImageView imageView = imageViewReference.get();
                if (imageView != null) {
                    imageView.setImageResource(R.drawable.icon);
                }
            }
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            url = params[0];
            return Application.get(getContext()).loadBitmap(url);
        }
    }
类ImageLoadingTask扩展异步任务{
私有最终WeakReference imageViewReference;
字符串url;
公共ImageLoadingTask(ImageView ImageView){
imageViewReference=新的WeakReference(imageView);
imageViewReference.get().setImageDrawable(null);
}
@凌驾
受保护的void onPostExecute(位图结果){
如果(isCancelled()){
结果=空;
}
if(imageViewReference!=null){
ImageView=imageViewReference.get();
如果(imageView!=null){
设置图像位图(结果);
//result.recycle();
}
}
}
@凌驾
受保护的void onPreExecute(){
if(imageViewReference!=null){
ImageView=imageViewReference.get();
如果(imageView!=null){
setImageResource(R.drawable.icon);
}
}
}
@凌驾
受保护位图doInBackground(字符串…参数){
url=params[0];
返回Application.get(getContext()).loadBitmap(url);
}
}
正如您在onPostExecute方法中看到的那样。如果我在图像被分配到imageview之后立即调用recycle,那么这就是使用回收图像的一个例外

有人能帮忙吗


提前感谢,并为我的英语道歉:p

我建议延迟加载图像。这意味着先将它们下载到SD卡,然后根据需要将它们加载到列表中。请查看此文件,了解有关如何执行此操作的广泛讨论。

我将尝试实现该方法,并让您知道。谢谢