2012-05-15 5 views
0

나는 이미지를로드 고전 AsyncTask를이 :안드로이드 로딩 이미지

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 스레드에서 수행해야합니다.

또한 try/catch의 멋진 finally 블록과 함께 사용하는 스트림을 닫습니다 (! null).

시간에 대해 걱정하지 마세요. 이동하는 길입니다.

1

단순 ... 리소스 URL에 대한 연결을 열어 필요한 모든 바이트를 다운로드하는 데 시간이 걸리기 때문에. 또한 성능은 인터넷 연결 속도에 따라 다를 수 있습니다.

+0

고맙지 만 풍경으로 변경 한 후 이미지를 다시로드하는 방법은 무엇입니까? 이것을 방지하는 방법이 있습니까? – Stas

+1

처음으로 다운로드 한 이미지를 앱의 캐시에 저장합니다. 그리고 이후에는 항상 캐시에서 첫 번째를 찾아야합니다. 그렇지 않으면 다시 다운로드하십시오. – waqaslam

+0

plaese가이 예를 보여줄 수 있습니까? – Stas