2012-05-15 34 views
0

我有经典的AsyncTask加载图片:的Android加载图像

private class DownloadImageTask extends AsyncTask<String,Void,Bitmap> { 

    Bitmap bitmap = null; 

    @Override 
    protected Bitmap doInBackground(String... str) { 
     try{ 

      InputStream in = new java.net.URL(picture).openStream(); 
      bitmap = BitmapFactory.decodeStream(new SanInputStream(in)); 
      //viewPicture.setImageBitmap(bitmap); 
      viewPicture.setBackgroundDrawable(new BitmapDrawable(bitmap)); 


     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 
} 

但图像加载到长。当我开始这个活动时,除了图像之外,所有东西都被加载,只有在等待一秒之后,我才能看到它。问题是什么?

回答

1
viewPicture.setBackgroundDrawable(new BitmapDrawable(bitmap)); 

应该在您的AsyncTask的onPostExecute方法的UI线程上完成。

此外,关闭流(如果!null)你用try/catch的一个不错的finally块。

不要担心时间,这是要走的路。

1

简单...因为需要时间打开资源URL的连接并下载所有需要的字节。此外,性能也可能因您的Internet连接速度而异。

+0

谢谢,但如何改变景观后重新加载图像?有什么办法可以防止这种情况发生? – Stas

+1

首次将下载的图像保存在应用程序的缓存中。并且事后总是首先在缓存中寻求它的可用,否则再次下载 – waqaslam

+0

你能否展示一个这样的例子? – Stas