본문 바로가기

안드로이드

AsyncTask

반응형

Deprecated 가 되어버렸지만 AsyncTask에 대해서 공부하고 정리하도록 하겠습니다.

AsyncTask는 백그라운드 스레드와 UI 스레드에서 작업할 수 있도록 만들어진 것입니다. doInBackground, onPostExecute 두 가지 함수를 이용해서요.

AsyncTask는 제네릭 크래스고, Params, Progress, Result 가 있다. 

AsyncTask 취소

cancel() 메서드가 있다. mCanceld 변수를 true로 만들고, 스레드 작업 이후에 onPostExecute() 대신 onCancelled() 메서드가 불린다. isCancelled() 리턴값을 doInBackground() 곳곳에서 체크하고, AsyncTask를 멤버 변수로 유지하고서 Activity의 onDestroy()에서 AsyncTask의 cancel() 메서드를 호출하는 것이다.

mayInterruptIfRunning 파라미터

doInBackgorund()를 실행하는 스레드에 interrupt()를 실행할지 여부를 나타낸다. interrupt()를 실행하면 Thread에서 sleep(), join() 메서드가 실행 중이거나 Object의 wait() 메서드가 실행중이라면 바로 InterruptException을 발생시키고 해당 catch 문을 실행한다.
 AsyncTask를 취소할 때는 mayInterruptIfRunning 파라미터를 일반적으로 mayInterruptIfRunning 파라미터를 일반적으로 true로 전달하는게 낫다. 내부에서 체크하지 않는다면 효과가 없겠지만 가능하면 doInBackgorund() 메서드 곳곳에서 isCandelled()와 함께 체크해서 백그라운드 작업을 중지하는 방식을 사용하자.

예외 처리 메서드

AsyncTask에는 예외를 처리하기 위한 onError() 메서드가 없다. 네트워크 문제와 같은 다양한 예외 케이스가 있는데 이 때 문제를 화면에 표시하는 경우가 많다. 이럴 때는 AsyncTask를 변형을 하거나 RxJava를 사용한다. 요즘은 코루틴의 ExceptionHandler를 사용하는 방법도 있을 것 같다.

 

참고 문서 : 안드로이드 프로그래밍 Next Step

반응형