안녕하세요.
파일 다운로드를 구현할때 늘 Thread 와 Handler를 이용해서 다운하고 UI 업데이트하고 했었는데요.
근데 보면 늘 파일을 많이 받다보면 중간에 한번씩 connect.getInputStream()에서 contentLength가 -1 오류가 뜨더라구요..
늘 다운로드가 불안한데,
간혹보면 다운로드가 불안해서 aSyncTask를 쓴다는 글을 본것같은데, 안드로이드나 자바에 이런 버그가 존재하는지 궁금해요..
다른분들은 아무런 이상없이 쓰레드 핸들러로 httpUrlConnection을 이용하시는지..
다운로드큐 클래스를 하나 만들어놓고, 외부에서 for문을 돌려서 필요한 갯수만큼 다운로드큐에 주소를 집어넣어서 다운하는방식인데 늘 for문돌때 한번씩 뻑이나서요..
저만그런가 다른분들도 그런가 싶어서..
혹시 이런이유에서 aSyncTask를 쓰시는분이 계시나요?
아님 그냥 편리해서 asynctask를ㄹ 쓰시는건지..
혹은 제가 잘못쓰는건지 확인좀 부탁드릴게요~
HttpURLConnection conn;
URL url;
int maxLen;
url = new URL("download_path);
conn = (HttpURLConnection) url.openConnection();
conn.connect();
byte []buffer = new byte[1024];
int len = 0;
long total = 0;
while((len = bis.read(buffer)) != -1){
if(IS_DOWNLOAD_CANCED) return;
bos.write(buffer, 0, len);
total += len;
DownloadPopup.CURRENT_PROGRESS = total;
DownloadPopup.dHandler.sendEmptyMessage(2); //프로그레스 설정
}
bos.flush();
bis.close();
bos.close();
conn.disconnect();




좀 더 확실한 다운로드를 원하시면 DownloadManager에 BroadcastReceiver를 이용한 방법을 고려해 보세요. 안드로이드에 내장된 클래스인데 실제로 안드로이드 전반에 걸쳐서 사용되고 있습니다. 네트웤 상태에 따른 처리, 이어받기, 기타 예외 처리 등 골치아픈 처리들을 이미 내부적으로 구현해놓았기 때문에 상당히 안정적으로 보입니다.