AsyncTask사용하기. 메인쓰레드와 새로운쓰레드내의 하나의 실행 단위라고 생각하면됨.
00. 진행상태를 보기위해 프로그레스바를 만든다.
01. 버튼을 만든다.
02. 정지시킬 버튼을 만든다.
03. 플레인텍스트를 만들어 진행상황을 보여주자.
04. 주석 참조.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
}
public void button01(View v){ /* 버튼2에대한 메소드값 추후 입력 */ }
public void button02(View v){ /* 버튼2에대한 메소드값 추후 입력 */ }
class BackgroundTask extends AsyncTask<Integer, Integer, Integer>{
@Override //처음에 클래스를 만들고나서 ALT+ENT 눌러서 기본 오버라이드 하자.
protected Integer doInBackground(Integer... params) {
return null;
}
}
}
그리고 마우스오른쪽버튼->Generate->Override 버튼을 순서대로 눌러서 아래와같이 3가지 메소드를 오버라이딩하자.
05. 코드를 완성하자.
package com.example.joey.myasynctasktest;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
ProgressBar progressBar;
int value = 0;
BackgroundTask task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
}
public void button01(View v){
task = new BackgroundTask();
task.execute(100);
}
public void button02(View v){
task.cancel(true);
}
class BackgroundTask extends AsyncTask<Integer, Integer, Integer>{
@Override
protected void onPostExecute(Integer integer) {
value = 0;
progressBar.setProgress(value);
textView.setText("마침.");
}
@Override
protected void onPreExecute() {
value = 0;
progressBar.setProgress(value);
}
@Override
protected void onProgressUpdate(Integer... values) {
progressBar.setProgress(values[0].intValue());
textView.setText("진행중 :" + values[0]);
}
@Override
protected Integer doInBackground(Integer... params) {
while(!isCancelled()){
value++;
if(value >= 100){
break;
} else {
publishProgress(value);
}
try{
Thread.sleep(100);
} catch (Exception e){}
}
return value;
}
}
}
06. 실행시켜보자.
07. 시작버튼을 눌러보자.
08. 정상작동됨을 볼 수 있고 중간에 중지 버튼을 눌러서 중지되는지 확인해보자.
09. 중지됨을 확인 할 수 있다. 시작을 눌러서 끝까지 진행시켜보자.
10. 시작버튼을 눌렀을때 int value = 0; 으로 초기화 시켜서 0부터 다시시작됨을 볼 수 있다.