下载图像并更新图像视图而不停止UI线程

时间:2014-12-09 11:57:27

标签: android imageview android-ui

我有一个连接到套接字服务器的应用程序,并在每次启动后下载图像。我想要实现的是将默认图像加载到ImageView字段中,并为用户提供完整的应用程序功能,同时应用程序从服务器下载图像。下载完成后,应该会自动替换ImageView中的图像。

我试图实现runOnUiThread(),但它也会阻止UI线程并冻结应用程序一段时间。

我无法阻止用户界面的唯一时间是用户必须与应用程序交互时(按下按钮,触摸屏幕)。在这种情况下,内容的下载发生在后台线程中。按下按钮后会发生ImageView更新。

如何在后台线程中下载图像并自动将其更新到ImageView?

runOnUiThread()实施的代码段(活动类中的方法):

private void updateImageThread() {
    new Thread() {
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //This loop blocks a UI thread
                    while(true){
                        bitmapImage = downloadImageThread.getBitmapImage();
                        //Pls note that DownloadImageThread is my implementation of the 
                        //class that connects to the server via socket and downloadsan image.
                        //Method getBitmapImage() returns downloaded image as a bitmap.
                        if (bitmapImage != null){
                            mapImageView.setImageBitmap(bitmapImage);
                            mapImageView.invalidate();
                            break;
                        }
                    }                   
                }
            });
        }        
    }.start();
}

1 个答案:

答案 0 :(得分:1)