안드로이드는 기본적으로 싱글 쓰레드
UI쓰레드가 일하는 동안
다른 일을 할 쓰레드가 필요할 때가 있다.
그냥 Thread를 상속받으면 위젯 속성을 변경할 수 없다.
다른 일도 하고, 위젯 속성도 변경하고 싶으면
AsyncTask 객체를 상속받아 구현해야한다.
doInBackground에서 복잡한 일들을 하고 onProgressUpdate로 계산되어 변경해야할 값을 보내준다.
doInBackground에서는 위젯을 건드릴수 없다
onProgressUpdate에서 계산 된 값을 받아 위젯 속성을 변경한다.
AsyncTask를 상속받는 메소드 1
// 파라미터 형 먼저 쓰고 리턴타입 차례로 쓰고
// ㄴㄴ
// AsyncTask<Params, Progress, Result>
// doInBackground params
// progress params
// doInBackground return type
class changeTask extends AsyncTask<Void, Integer, Void> {
public Void doInBackground(Void... params) {
for (int i = 0; i < 100; ) {
this.publishProgress(i);
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
if (i >= 100) {
i = 0;
}
i = i+10;
}
return null;
// for (; progressBar.getProgress() < 100; ) {
// progressBar.setProgress(progressBar.getProgress() + 10);
//
// try {
// Thread.sleep(500);
// } catch (Exception e) {
// e.printStackTrace();
// }
// if (progressBar.getProgress() >= 100) {
// progressBar.setProgress(0);
// }
// }
}
// 위젯을 건드릴 수 있는건 이 메서드뿐이다.
public void onProgressUpdate(Integer ... param) {
progressBar.setProgress(param[0]);
editText.append(progressBar.getProgress() + " \n");
}
}
}