본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Async Download.

by 돼지왕 왕돼지 2012. 2. 18.
반응형


안녕하세요. 돼지왕 왕돼지입니다.
오늘은 비동기 다운로드( Async Download )에 대해 알아보죠.


왜 비동기 다운로드를 해야 하는데?


  : 모바일 장비에서의 네트워크는 기본적으로 불확실성이 높고, 접속 상태도 신뢰성이 없어 에러 발생률이 높습니다. 따라서 네트워크 응용 프로그램은 섬세한 예외 처리가 필수입니다.  웹 요청은 시간이 오래 걸리는데, 그 동안에도 다른 작업을 할 수 있어야 하며 적어도 데이터 수신중임을 표시해야 합니다. 아니면 ANR이 발생하기 쉽기 때문입니다. 결국 네트워크 프로그램은 멀티 스레드로 작성하는 것이 필수라고 할 수 있죠.
 



코드좀 보여줘봐.

 

ProgressDialog mProgress;
DownThread mThread;
 
mProgress = ProgressDialog.show(.this, "Wait", "Downloading...");
mThread = new DownThread("http://www.google.com");
mThread.start();
 
 class DownThread extends Thread{
   String mAddr;
   String mResult;
 
   DownThread (String addr){
      mAddr = addr;
      mResult = "";
   }
 
   public void run(){
      StringBuilder html = new StringBuilder();
      try{
         URL url = new URL(mAddr);
         HttpURLConnection conn = (HttpURLConnection)url.openConnection();
         if (conn != null){
            conn.setConnectTimeout(10000);
            conn.setUseCaches(false);
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK){
               BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
               for(;;){
                  String line = br.readLine();
                  if (line == null) break;
                  html.append(line + '\n');
               }
               br.close();
               mResult = html.toString();
            }
            conn.disconnect();
         }
      }
      catch (Exception ex) { ; }
      mAfterDown.sendEmptyMessage(0);
   }
}
 
Handler mAfterDown = new Handler(){
   public void handleMessage (Message msg){
      mProgress.dismiss();
      // To do
   }
}

 
 
로그인 없이 추천 가능합니다. 손가락 꾸욱~

반응형

댓글