반응형
0. Histroy
- 이 글은 2012-01-20 초안 작성 시작하엿습니다.
- 오래된 정보, 잘못된 정보, 오타가 있으면 Comment 로 남겨주세요. 확인 후 수정하겠습니다.
- 이 글은 2012-01-20 초안 작성 완료하였습니다.
1. Prerequisite & References
- Java 기초 지식
- Android 기초 지식
- Thread 기초 지식
[Tutorial] 쉽게 사용하는 Thread와 Handler. AsyncTask class 를 통해 해보아요~ (개념)
2. Information
약속한데로 예제를 통해 AsyncTask 를 배워봅시다
예제는 Network 를 통해 다운로드를 받으면서 ProgressDialog 를 업데이트 하는 내용입니다.
( 사실 다운로드를 실제로 수행하지는 않고, 다운로드 하는 것처럼 50ms 를 sleep 하는 형태입니다. )
다운로드의 경우 시간이 오래 걸리기 때문에 Thread에서 처리하는 것이 옳으며,
ProgressDialog의 업데이트의 경우 UI 의 Update 이기 때문에 UI Thread에서 처리해야만 합니다.
AsyncTask 가 제격이겠죠?
ProgressDialog mProgress;
Context mContext;
public void onCreate( Bundle savedInstance ){
mContext = this;
new AccumulateTask().execute(100);
}
public void onCreate( Bundle savedInstance ){
mContext = this;
new AccumulateTask().execute(100);
}
class AccumulateTask extends AsyncTask<Integer, Integer, Integer> {
// execute 실행시 가장 먼저 수행되며 MainThread에서 수행.
// execute 실행시 가장 먼저 수행되며 MainThread에서 수행.
protected void onPreExecute(){
// dialog 설정
// dialog 설정
mValue = 0;
mProgress = new ProgressDialog( mContext );
mProgress.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL );
mProgress.setTitle( "Updating" );
mProgress.setMessage( "Wait..." );
mProgress.setCancelable( false );
mProgress.setProgress( 0 );
mProgress.setButton( "Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int whichButton){
cancel(true);
}
});
mProgress.show();
}
// 다른 Thread에서 수행되며, onPreExecute() 후 수행.
// arg0 에는 execute( params ) 에서 전달한 100 이 들어온다.
protected Integer doInBackground(Integer... arg0){
while ( isCancelled() == false ){
mValue++;
if ( mValue <= 100 ){
// onProgressUpdate() 가 불린다.
// onProgressUpdate() 가 불린다.
publishProgress( mValue );
}
else{
break;
}
// 다운로드 하는것처럼 위장
// 다운로드 하는것처럼 위장
try { Thread.sleep(50); } catch (InterruptedException e) { ; }
}
return mValue;
}
// doInBackground() 에서 publishProgress를 호출했을 때 Main Thread에서 수행.
// progress 에는 publishProgress( params ) 에서 전달한 mValue 값이 넘어온다.
protected void onProgressUpdate( Integer... progress ){
mProgress.setProgress(progress[0]);
mText.setText(Integer.toString(progress[0]));
}
// doInBackground() 작업이 끝나면 호출되며, MainThread에서 작업 수행
// result 값은 doInBackground() 의 Return 값이 들어온다.
protected void onPostExecute(Integer result){
mProgress.dismiss();
}
// cancle 되었을 때 호출된다.
protected void onCancelled(){
mProgress.dismiss();
}
}
자 이제 감이 팍 오시나요?
확실하게 안 오신다면 다시 한번 개념을 잡아보시기 바랍니다.
[Tutorial] 쉽게 사용하는 Thread. AsyncTask class 를 통해 해보아요~ (개념)
손가락 추천 꾸욱~ 더 좋은 글로 보답하겠습니다.
3. Summary
- Network를 통해 파일을 Download 하면서 진행 상태를 ProgressDialog에 표시하는 예제를 통해서 AsyncTask를 파악해보았습니다.
4. References
- http://developer.android.com/reference/android/os/AsyncTask.html
Android developers AsyncTask doc.
- http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
Android developers Process & Thread Dev Guide.
5. Tags
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] Manifest Activity 의 속성 ConfigChanges 에 대해 알아보아요. (0) | 2012.01.23 |
---|---|
[Android/안드로이드] Android Developer AsyncTask 파트 번역본입니다. (4) | 2012.01.20 |
[Android/안드로이드] 쉽게 사용하는 Thread와 Handler. AsyncTask class 를 통해 해보아요~ (개념) (9) | 2012.01.19 |
[Android/안드로이드] 예제를 통해 배우는 간단한 안드로이드 AppWidget. 함께 만들어 봐요 #2 (5) | 2012.01.14 |
[Android/안드로이드] 개념을 통해 배우는 간단한 안드로이드 AppWidget. 함께 만들어 봐요. #1 (0) | 2012.01.14 |
댓글