我目前有一个使用AsyncTask类进行Web服务调用的UI。此调用获取多张图片并将其存储在HashMap中。然后通知UI并使用这些图像创建UI。然而,这有时需要10-15秒,这很烦人。有没有办法用后台服务一次填充UI一张图片,以便用户开始比现在更快地看到图像?
感谢。
答案 0 :(得分:2)
这是一个如何执行此操作的粗略示例:
public Void doInBackground(String... urls) {
int len = urls.length;
for(int i = 0; i < len; ++i) {
Bitmap b = downloadImage(urls[i]);
publishProgress(new Object[] {b, i});
}
return null;
}
public void onProgressUpdate(Object... values) {
Bitmap b = (Bitmap)values[0];
Integer bitmapIndex = (Integer)values[1];
//replace the image at location "bitmapIndex" in your collection of images with "b"
//update your adapter via notifyDataSetChanged
}
使用AsyncTask
的{{1}}方法在onProgressUpdate
内发布进度。此方法(doInBackground
)在UI线程上运行。
答案 1 :(得分:1)
我不知道您是否意识到这一点,但为了以防万一,AsyncTask
具有onProgressUpdate
函数,您可以使用该函数在UI线程上执行操作,{ {1}}以调用AsyncTask
结束。在onPostExecute
方法中,只需使用相关参数调用doInBackground
。