일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 무역전쟁
- Java
- 시황
- 국제유가
- 주식시황
- 사드보복완화
- Intent
- 어학·외국어
- 토익이메일
- 안드로이드
- 화승엔터프라이즈
- LG전자
- dataframe
- 영어메일쓰기
- toeice-mail
- englishwriting
- 트럼프
- 셀트리온
- e-mailwriting
- 다우산업
- 파이썬
- Python
- ruby
- 네마녀의날
- S&P
- android
- 영어메일
- 다우
- 나스닥
- 금리인상
- Today
- Total
Developer MJ Story
[Android/AsyncTask] AsyncTask 활용하기 본문
- AsyncTask는 말 그래도 비돛기적으로 Android 내에서 Thread를 대신해 background에서 작업을 수행하는 class
- 특히 background 스레드가 UI위젯과 자주 통신을 해야 할 수록 빛을 볼 수 있는 것이 AsyncTask
- AsyncTask
- AsynckTask는 main Thread 입장에서 볼 대 비동기적으로 작업 수행
- AsynckTask<Params, Progress, Result>
- Params: background작업시 필요한 data의 type지정
- progress: background 작업 중 진행상황을 표현하는데 사용되는 data를 위한 type 지정
- Result: background 작업 완료 후 리턴 할 data의 type 지정
- AsynckTask에서 사용되는 함수들
- onPreExecure()
- background 작업이 시작되자마자 UI 스레드에서 실행될 코드를 구현
- e.g. background 작업의 시작을 알리는 text 표현, background 작업을 위한 progressBar popup 등
- background 작업이 시작되자마자 UI 스레드에서 실행될 코드를 구현
- doInbackground()
- Background에서 수행할 작을 구현, execute() 메소드에 입력된 인자들을 전달 받음.
- onprogressUpdae()
- publishProgress() 메소드 호출의 callback으로 UI스레드 보여지는 background 작업 진행 상황을 update 하는 부분을 구현
- e.g. ProgressBar 증가
- publishProgress() 메소드 호출의 callback으로 UI스레드 보여지는 background 작업 진행 상황을 update 하는 부분을 구현
- onPostExecute(Result result)
- doInBackground()가 리턴하는 값을 바탕으로 UI 스레드에 background 작업 결과를 표현하도록 구현
- e.g. background작업을 계산한 결과를 UI에 표현
- doInBackground()가 리턴하는 값을 바탕으로 UI 스레드에 background 작업 결과를 표현하도록 구현
- onCalcelled()
- AsyncTask:cancel(Booean) 메소드를 사용해 AsyncTask인스터스의 background 작업을 정지 도는 실행 금지 시켰을 때 실행되는 callback, background 작업의 정지에 따른 리소스 복구/ 정리
- onPreExecure()
- 아래 소스코드는 Wi-Fi Hotspot을 on/off 하는 코드중 AsyncTask subclass 부분만 발췌
class SetWifiAPTask extends AsyncTask<Void, Void, Void> {
booleanmMode; //enable or disable wifi AP
booleanmFinish; //finalize or not (e.g. on exit)
ProgressDialog d;
public SetWifiAPTask(boolean mode, boolean finish, Context context) {
mMode = mode;
mFinish = finish;
d = new ProgressDialog(context);
}
@Override
protectedvoid onPreExecute() {
super.onPreExecute();
d.setTitle("Turning WiFi AP " + (mMode?"on":"off") + "...");
d.setMessage("...please wait a moment.");
d.show();
}
@Override
protectedvoid onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
try {
d.dismiss();
WifiAPActivity.updateStatusDisplay();
} catch (IllegalArgumentException e) {
};
if (mFinish){
finish();
}
}
@Override
protected Void doInBackground(Void... params) {
setWifiApEnabled(mMode);
returnnull;
}
}
- 유의 사항
- AsyncTask클래스는 항상 subclassing하여 사용
- AsyncTask인스턴스는 항상 UI 스레드에서 생성
- AsyncTask: execute() 메소드는 항상 UI 스레드에서 호출
- AsyncTask의 callback 함수 onPreExecute(), doInBackground, onProgressUpdata(), onPosExecute()는 직접 호출하면 안되고, callback으로만 사용
'Software > Android' 카테고리의 다른 글
[android/BT] OPP(Object Push Profile)를 활용한 file 전송 (0) | 2014.07.05 |
---|---|
[Android/UDP] UDP socket을 이용한 message send/receive (0) | 2014.06.09 |
[Android/ListView] Android ListView에 두 개의 아이템 표시하기(simple_list_item_2) (0) | 2014.06.09 |
[Android/Contacts] 번호를 입력하면 DB저장된 이름을 Return하는 함수 구현 (0) | 2014.06.09 |
[Android/Java] StringTokenizer를 이용한 String 나누기 (0) | 2014.06.09 |