출처 : http://neptjuno.tistory.com/33
public abstract class AsyncTask extends Object
세 가지 generic type(Params, Progress, Result)과 네 가지 step (onPreExecute, doInBackground, onProgressUpdate, onPostExecute)으로 구성
1. generic type
1) Params : 실행 될 때 task에 전달된 파라미터의 type
2) Progress : 백스라운드에서 작업하는 동안 발생되는 progress unit의 type
3) Result : 백그라운드 작업에서 처리된 결과의 type
private class MyTask extends AsyncTask<void, void, void> {...}
private class MyTask extends AsyncTask<URL, Integer, Long>{...}
(필요없는 type에 대해서는 void로 작성)
2. step
1) onPreExecute()
- UI thread에서 호출된 즉시 호출되는 메소드
- task를 setup하는 데 사용
2) doInBackground(Params .. )
- onPreExecute()의 수행이 끝난 후 백그라운드로 즉시 호출.
- 긴 수행 시간을 요하는 작업을 백그라운드로 수행하는 역할
- asynchronous task의 파라미터는 이 때 전달.
- 수행 결과는 이 단계에서 반환되어야 하며 마지막 단계로 전달
- publishProgress(Progress..)를 사용할 수 있으며 이 값들은 onProgressUpdate(Progress..)단계로 인해 UI thread에 불려지게 됨
3) onPostExecute(Result)
- 백그라운드 작업이 종료된 후에 UI thread에 호출되는 함수
- 백그라운드에 계산된 결과가 이 단계의 파라미터로 전달됨
3. Threading rules
- 이 task instance는 UI thread에서 생성되어져야만 한다.
- execute(Param..)은 UI thread에서 호출되어져야만 한다.
- onPreExecute(), onPostExecute(Result), doInBackground(Params..), onProgressUpdate(Progress..)는 수동으로 호출하지 않는다.
- task는 오직 한번만 수행 될 수 있다.
출처 : http://tigerwoods.tistory.com/28

AsyncTask class
- backgrount 작업을 위한 모든 일(thread 생성, 작업 실행 UI와 통신 등)을 추상화 함으로 각각의 background 작업을 객체 단위로 구현/관리 할 수 있게 하는 것이 목적

type을 정할 필요가 없는 generic이 있다면 void전달
background 작업의 시작과 background 작업 중 진행정보의 UI스레드 표현
1) final AsyncTask<…> execute(Params… params):
Background 작업을 시작한다. 꼭 UI스레드에서 호출하여야 함. 가변인자를 받아들임으로 임의의 개수의 인자를 전달할 수 있으며, 인자들은 doInBackground(…) 메소드로 전달된다.
public final AsyncTask.Status getStatus()
를 이용해 인스턴스 상태를 얻을 수 있음.
PENDING, RUNNING, FINISHED 중에서 리턴
public abstract class AsyncTask extends Object
세 가지 generic type(Params, Progress, Result)과 네 가지 step (onPreExecute, doInBackground, onProgressUpdate, onPostExecute)으로 구성
1. generic type
1) Params : 실행 될 때 task에 전달된 파라미터의 type
2) Progress : 백스라운드에서 작업하는 동안 발생되는 progress unit의 type
3) Result : 백그라운드 작업에서 처리된 결과의 type
private class MyTask extends AsyncTask<void, void, void> {...}
private class MyTask extends AsyncTask<URL, Integer, Long>{...}
(필요없는 type에 대해서는 void로 작성)
2. step
1) onPreExecute()
- UI thread에서 호출된 즉시 호출되는 메소드
- task를 setup하는 데 사용
2) doInBackground(Params .. )
- onPreExecute()의 수행이 끝난 후 백그라운드로 즉시 호출.
- 긴 수행 시간을 요하는 작업을 백그라운드로 수행하는 역할
- asynchronous task의 파라미터는 이 때 전달.
- 수행 결과는 이 단계에서 반환되어야 하며 마지막 단계로 전달
- publishProgress(Progress..)를 사용할 수 있으며 이 값들은 onProgressUpdate(Progress..)단계로 인해 UI thread에 불려지게 됨
3) onPostExecute(Result)
- 백그라운드 작업이 종료된 후에 UI thread에 호출되는 함수
- 백그라운드에 계산된 결과가 이 단계의 파라미터로 전달됨
3. Threading rules
- 이 task instance는 UI thread에서 생성되어져야만 한다.
- execute(Param..)은 UI thread에서 호출되어져야만 한다.
- onPreExecute(), onPostExecute(Result), doInBackground(Params..), onProgressUpdate(Progress..)는 수동으로 호출하지 않는다.
- task는 오직 한번만 수행 될 수 있다.
출처 : http://tigerwoods.tistory.com/28
AsyncTask class
- backgrount 작업을 위한 모든 일(thread 생성, 작업 실행 UI와 통신 등)을 추상화 함으로 각각의 background 작업을 객체 단위로 구현/관리 할 수 있게 하는 것이 목적
type을 정할 필요가 없는 generic이 있다면 void전달
- protected void onPreExecute():
Background 작업이 시작되자마자 UI스레드에서 실행될 코드를 구현해야 함. (예. background 작업의 시작을 알리는 text표현, background 작업을 위한 ProgressBar popup등) - protected abstract Result doInBackground(Params… params):
Background에서 수행할 작업을 구현해야 함. execute(…) 메소드에 입력된 인자들을 전달 받음. - void onProgressUpdate(Progress... values):
publishProgress(…) 메소드 호출의 callback으로 UI스레드에서 보여지는 background 작업 진행 상황을 update하도록 구현함. (예. ProgressBar 증가 등) - void onPostExecute(Result result):
doInBackground(…)가 리턴하는 값을 바탕으로 UI스레드에 background 작업 결과를 표현하도록 구현 함. (예. background작업을 계산한 복잡한 산술식에 대한 답을 UI 위젯에 표현함 등) - void onCancelled():
AsyncTask:cancel(Boolean) 메소드를 사용해 AsyncTask인스턴스의 background작업을 정지 또는 실행금지 시켰을 때 실행되는 callback. background작업의 실행정지에 따른 리소스복구/정리 등이 구현될 수 있다.
1) final AsyncTask<…> execute(Params… params):
Background 작업을 시작한다. 꼭 UI스레드에서 호출하여야 함. 가변인자를 받아들임으로 임의의 개수의 인자를 전달할 수 있으며, 인자들은 doInBackground(…) 메소드로 전달된다.
2) final void publishProgress(Progress... values):
Background 작업 수행 중 작업의 진행도를 UI 스레드에 전달 함. doInBackground(…)메소드 내부에서만 호출.
public final AsyncTask.Status getStatus()
를 이용해 인스턴스 상태를 얻을 수 있음.
PENDING, RUNNING, FINISHED 중에서 리턴
'안드로이드' 카테고리의 다른 글
공유 가능 앱 리스트 가져오기 (0) | 2017.03.06 |
---|---|
안드로이드 앱의 cpu 사용량 구하기 (0) | 2017.03.06 |
AppWidget (0) | 2011.07.28 |
Broadcast Receiver (0) | 2011.07.26 |
나인패치 (0) | 2011.07.26 |