AsyncTask 클래스, AsyncTask Generic 타입, AsyncTask 장점과 단점

CODEDRAGON Development/Android

반응형


 

AsyncTask 클래스

·       Thread의 경우 UI를 관리하는 MainTread외에 Background Thread에서 MainThread UI를 접근하려면 Handler를 사용 했습니다. (새로운 Thread 생성 후 Handler 객체를 통해 통신)

·       안드로이드에서는 쓰레드의 여러 가지 작업을 AsyncTask 객체 하나로 만들어 사용하기 쉽게 만들어 놓았습니다.

·       Thread를 좀더 쉽게 사용하기 위해 만들어놓은 클래스여서 ThreadHandler의 기능들이 콜백 메서드로 모두 존재합니다.

·       비동기 AsyncTask클래스로 스레드를 생성하면 간편하게 스레드를 사용할 수 있습니다.

·       하나의 클래스에서 UI 작업을 쉽게 할 수 있게 해주는 클래스

·       AsyncTask 내부에는 자체 ThreadPool 이 있어 Thread 가 무한정 늘어나도 메모리에 부담을 주지 않도록 관리하고 있기 때문에 따로 ThreadPool 을 관리하지 않는다면 AsyncTask 를 사용하는 것도 좋은 방법입니다.

·       자바에서는 비동기 처리를 하기 위해 별도의 Thread 를 생성하여 public void run()  메소드를 재정의해서 구현하면 되지만 안드로이드에서는 직접 Thread 를 생성하기 보다는 AsyncTask 를 사용하도록 권장하고 있습니다.

 

 

 

public abstract class AsyncTask

http://developer.android.com/intl/ko/reference/android/os/AsyncTask.html

 

 

AsyncTask Generic 타입

android.os.AsyncTask<Params, Progress, Result>

 

인자

설명

Params

·       doInBackground() 파라미터 타입

·       execute() 메소드 인자 값이 됩니다.

Progress

·       doInBackground() 작업 시 진행 단위의 타입

·       onProgressUpdate 파라미터 타입입니다.

Result

·       doInBackground() 리턴값

·       onPostExecute() 파라미터 타입입니다.

 

 

 

AsyncTask 장점과 단점


장점

·       AsyncTask는 비교적 오래 걸리지 않은 작업에 유용

·       Task 취소가 용이

·       로직과 UI 조작이 동시에 일어나야 할 때 매우 유용하게 사용

단점

·       하나의 객체이므로 재사용이 불가능합니다. (객체를 새롭게 생성하면 되지만 메모리 효율이 떨어집니다.)

·       구현한 액티비티 종료 시 별도의 지시가 없다면 종료되지 않습니다.

·       Activity 종료 후 재시작 시 AsyncTask Reference invalid 상태가 되며 onPostExecute() 메소드는 새로운 Activity에 어떠한 영향도 주지 못합니다.

·       AsyncTask의 기본 처리 작업 개수는 1개입니다.