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