如何在Android UI线程中一次加载一个图像

时间:2011-07-18 18:05:19

标签: android web-services image service background

我目前有一个使用AsyncTask类进行Web服务调用的UI。此调用获取多张图片并将其存储在HashMap中。然后通知UI并使用这些图像创建UI。然而,这有时需要10-15秒,这很烦人。有没有办法用后台服务一次填充UI一张图片,以便用户开始比现在更快地看到图像?

感谢。

2 个答案:

答案 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