마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask 파일 다운로드 취소할 수 있나요 ?

0 추천
AsyncTask로 파일을 받는 도중, 취소버튼을 누르면

 

다운로드를 중지하고싶은데

 

어떻게 해야하나요 ?

 

다운로드는 Http방식으로 받고있습니다.
음무 (17,820 포인트) 님이 2014년 4월 21일 질문

2개의 답변

+2 추천
 
채택된 답변
직접 flag를 만들어 체크하는 것은 좋지 않은 방법입니다. (쓰레드간의 동기화를 직접 처리해야 함)

올바른 방법은 AsyncTask.cancel 을 호출하여 종료요청을 하고,

doInBackground 에서 isCancelled 로 종료해야 하는지를 검사하는 것입니다.
익명사용자 님이 2014년 4월 22일 답변
음무님이 2014년 4월 22일 채택됨
AsyncTask.calse을 호출하면 doInBackground 작업이 멈추나요?
isCancelled는 뭔가요 ? 조금만 보충설명 부탁드리겠습니다.
쓰레드를 종료하는 방법에 대해 아신다면 AsyncTask의 종료 방법도 크게 다르지 않은데요.
쓰레드의 경우 안전하게 종료하는 방법으로
해당 쓰레드.interrupt() 를 호출하고
쓰레드에서는 while(조건 && Thread.currentThread().isInterrupted()) 식으로 하고 try - catch로 InterruptedException이 발생했을 경우의 처리와 함께 종료합니다.

이 내용으로 생각해보면 cancel을 호출하고 반복문에서 isCancelled를 확인하라는 내용입니다.
http://developer.android.com/reference/android/os/AsyncTask.html
의 Cancelling Task 섹션을 참고하세요
깔금히 이해됐습니다 감사합니다
+1 추천
다운로드면 아래와 같은 형태로 루프 돌면서 read 할 것 같은데, flag를 둬서 버튼이 눌려졌을 때 flag를 true로 세팅하고

doInbackground를 종료 하도록 하시면 될 것 같아요.

while( (read = in.read(buf) > 0 ) {

     ....

}
And (1,760 포인트) 님이 2014년 4월 22일 답변
...