Android 使用AsyncTask将图像加载到ListView(同时记住异常)

Android 使用AsyncTask将图像加载到ListView(同时记住异常),android,Android,我发现很多帖子解释了如何使用AsyncTask在ListView中加载图像,问题是,所有人(至少是我找到的那些人)都是通过每次在ListView适配器中调用getView方法时实例化并启动AsyncTask来实现的 我已经这样做了,所有的工作都很好,但是当我快速浏览ListView时,它在.execute上抛出一个异常,表示它拒绝创建更多线程 所以我的问题是如何克服这个问题,同时继续使用异步任务?我可以使用一个普通的Java线程,但是项目规范说我是不允许的 感谢和干杯您应该使用IntentSer

我发现很多帖子解释了如何使用AsyncTask在ListView中加载图像,问题是,所有人(至少是我找到的那些人)都是通过每次在ListView适配器中调用getView方法时实例化并启动AsyncTask来实现的

我已经这样做了,所有的工作都很好,但是当我快速浏览ListView时,它在.execute上抛出一个异常,表示它拒绝创建更多线程

所以我的问题是如何克服这个问题,同时继续使用异步任务?我可以使用一个普通的Java线程,但是项目规范说我是不允许的


感谢和干杯

您应该使用IntentService而不是AsyncTask,并缓存已下载的图像,以便下次无需获取数据。或者,您也可以查看现有的项目,这些项目可以满足您的所有需求

我发现这非常有用:

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

    public BitmapDownloaderTask(ImageView imageView) {
        imageViewReference = new WeakReference<ImageView>(imageView);
    }

    @Override
    // Actual download method, run in the task thread
    protected Bitmap doInBackground(String... params) {
         // params comes from the execute() call: params[0] is the url.
         return downloadBitmap(params[0]);
    }

    @Override
    // Once the image is downloaded, associates it to the imageView
    protected void onPostExecute(Bitmap bitmap) {
        if (isCancelled()) {
            bitmap = null;
        }

        if (imageViewReference != null) {
            ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}

下面是一个在gridview、listview和pager中显示图像的极好示例。看看这个


我会选择Android的Aquery

aq.id(R.id.image1).image("http://www.vikispot.com/z/images/vikispot/android-w.png");
了解更多信息:

或截击:

您还可以查看。具有良好的内存缓存配置:你也可以使用截击。是的,这就是我目前正在做的,我将它们存储在本地缓存中。唯一的问题是当ListView同时请求很多时。接下来,我来看看IntentService,“以前从未听说过”。谢谢,谢谢,看来这就是我要找的。需要多读一点,但我想就是这样了;