안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요..
안드로이드 입문자입니다만..
AsyncTask 를 이용하여 현재 진행률을 보여주는 어플을 개발중에 있습니다만..
현재 수행하고있는 과제 특성상 여러번 반복을 해야하기때문에
사용자가 효율적으로 AsyncTask를 관리하였으면 합니다.
즉, AsyncTask 를 사용자가 원하는 정확한 시간에 종료하였으면 하는데,
뭐 OnCancel 명령어나 이런게 있긴한것같은데 실제로 먹히는것같진 않고
인터넷을 오늘 하루종일 찾아 뒤져봤는데 가장 효율적인 방법이 AsyncTask 클래스 안에
while 문을 돌려서 flag 같은걸 지정해서 true/false 로 이용해서 구분하라 하는데
이 방법은 많이 쓰이는 방법이긴 한것같은데 많은 양의 작업의 경우 그 시점을 명확하게 할수없고
근본적으로 AsyncTask 라는 스레드를 종료시키는명령어가 아니기 때문에
명확한것 같지 않고, 뭐 난 감하네요..
결정적으로, 문제는 액티비티가 destroy 된 상태에서 AsyncTask 스레드는 일반스레드와 달리
계속하여 남아있다는것이 문제죠.
과연, 이 AsyncTask 를 onCancelled(true) 명령어외에 종료하는법을 알고계시는 분..
재야의 고수분,,, 계신지요.. 오늘 하루종일 국내/해외 사이트를 막론하고 다뒤져봤는데
없더라구요.. 여기 계신분들의 능력을 믿습니다.
도와주세요 부탁드립니다ㅠㅠ
AsyncTask를 종료시키는 올바른 방법은 해당 객체의 cancel() 메소드를 호출하는 것입니다.
다만 이게 잘 동작하려면 doInBackground() 메소드 안에서 주기적으로 isCancelled() 메소드를
호출하여 종료 요청이 들어온 경우 종료하게 만들어야 합니다.
좀 더 자세한 내용은 http://developer.android.com/reference/android/os/AsyncTask.html 의
Cancelling a task 항목을 참고하시기 바랍니다.
그리고 AsyncTask 는 동작할 때 내부적으로 스레드 풀을 만들어 동작하게 되어 있습니다.
그래서 AsyncTask 를 돌리는 스레드는 없어지지 않습니다.
3.0 이상인 경우 executeOnExecutor 메소드를 사용하면 스레드에 대한 제어도 가능합니다만,
하위버전에서는 스레드를 직접 제어할 방법은 없을 겁니다.