안드로이드 개발 질문/답변
(글 수 45,052)
AsyncTask의 doInBackground 에서 실행해 주다가 AsyncTask를 멈춰야 할 때가 있습니다.
cancel(true)를 줬는데 doInBackgroud의 내용이 끝까지 실행이 되더라고요.
doInBackground 하는 중에 멈추는 현상이 있어서 멈추면 강제종료 할려고 하는데요.
doInBackground 에서 isCancelled( )를 체크하려고 해도 멈춰버리면 체크를 못하기 때문에
브로드캐스트에서 cancel(true)를한건데 계속 실행이 되서 질문드립니다.
다른 방법이 있으면 좀 알려주세요.
2012.06.22 20:35:57
쓰레드를 바로 종료하는 방법은 없는걸로 알아요ㅎ
그나마 제일 빠른게 interrupt로 알고있어요.
근데 왠만하면 바로 끝나지 않나요?
숫자 계산같은 미세한 작업이라면 몰라도, 대게 바로 종료되거나 아주약간 딜레이되는걸로아는데..
만일 그런 문제라면 쓰레드 내부에 플래그를 둬서 연산을 그만두게 하는게 낫지않을까 싶네요..
예를들어 while문을 돌린다고 하면 while문 안에 if(FLAG==false) return ;
이런식으로 미세한작업은 내부에서 관두게하고 쓰레드는 interrupt를 걸어줘서 알아서 종료하게만들어주는게 날듯싶네요..




AsyncTask는 복잡해서 잘 안쓰는데.. doInBackground라면 Thread부분이 아닐까요?
만일 문제가 발생하면 안에서 Thread.interrupt를 걸어주면될거같은데..