안드로이드 - Thread (AsyncTask)
protected void onPreExecute() { //Thread에서 실행될 작업을 초기화 및 설정한다.
Log.i(TAG,"onPreExecute()");
dialog = new ProgressDialog(mContext);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setTitle("Dialog");
dialog.setMessage("작동 시작");
dialog.setCancelable(false);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
cancelFlag = true;
cancel(true);
}
});
dialog.setProgress(0);
dialog.show();
}
doInBackground() → Thread의 run메소드와 같은 역할(publishProgress()메소드를 통해서 ProgressUpadte()에 파라미터 전달)
protected Integer doInBackground(Integer... integers) {
Log.i(TAG,"doInBackground()");
Log.i(TAG,"params[0] : " + integers[0]);
Log.i(TAG,"params[1] : " + integers[1]);
for(int i = 0; i<integers[0]; i++){
publishProgress(String.valueOf(i)); //onPoregressUpdate에 전달하는 파라미터
try{Thread.sleep(200);}catch (Exception e){}
if(cancelFlag) break;
}
return integers[0];
}
onProgressUpdate() → 작업의 진행정도가 업데이트
protected void onProgressUpdate(String... values) {
Log.i(TAG,"onProgressUpdate()");
int i = Integer.parseInt(values[0]);
dialog.setProgress(i);
mTv.setText(String.valueOf(i));
}
onPostExecute() → 작업 완료 후 호출
@Override
protected void onPostExecute(Integer integer) {
Log.i(TAG,"onPostExecute()");
Log.i(TAG, "result : " + integer);
mTv.setText(String.valueOf(integer));
dialog.dismiss();
}
onCancelled() → 작업이 잘못되어 정지되었을 때 호출
5개의 콜백메소드를 오버라이딩하여 사용하여 AsyncTask객체를 구현할 수 있습니다.
위에 콜백메소드를 이용하여 간단한 예제를 만들면~
progressdialog를 만들 수 있습니다. 만약 CANCEL을 누른다면 숫자가 쓰여있는 TextView는 Cancelled란 문자로 변경됩니다.
MainActivity에서 객체를 생성하고 실행하는 부분은 Button뷰에 이벤트를 달았습니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv01);
btn01 = (Button) findViewById(R.id.bt01);
btn01.setOnClickListener(listener);
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bt01:
newAsyncTask = new NewAsyncTask(MainActivity.this, tv);
newAsyncTask.execute(100,50);
break;
}
}
};
'Android' 카테고리의 다른 글
안드로이드 - 초간단 메모장 만들기3(옵션 추가) (0) | 2017.08.29 |
---|---|
안드로이드 -초간단 메모장 만들기2 (파일변경) (1) | 2017.08.28 |
android - webview(웹뷰)예제 (0) | 2017.08.26 |
android - 안드로이드 SQLite execSQL()과 rawQuery()의 차이 (0) | 2017.08.25 |
android - 안드로이드 초간단 메모장 만들기 (2) | 2017.08.25 |