실습
이번에는 핸들러 생성만
메인스레드에 어떻게 처리하면 좋겠는지 보낼거다.
mHandler.post를 해서 Runable을 상속받은 메소드 코드로 보낸다.
반복적인 객체는 msg를 보내고, 다형성을 생각하면 post를 보낸다.
이런것들을 복잡해 하는 사람들 때문에 AsncTask가 있다.
이 클래스를 상속받으면 내부에 doinbackground 에서 쓰레드로 실행시켜준다.
실습은 일단 똑같이 한다.
안드로이드에서 on 으로 시작되면 거의 main 쓰레드가 호출하는 함수이다.
중간에 뭔가를 하고 싶으면
publish ..모 메소드를 호출해서
onPrexcute() 는 호출 전 세팅할때
onPostExecute() 는 끝나고 호출 됨.
onProgressUpdate함수 불러준다.
오직 하나의 쓰레드가 나와서 한번에 하나씩 처리 한다.
api 11에서 는 128개까지 가지고 있는데 그 이후는 오직 한개 이다.
public class AsncActivity extends AppCompatActivity {
TextView message;
ProgressBar progressbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_asnc);
progressbar = (ProgressBar) findViewById(R.id.progressBar);
message = (TextView) findViewById(R.id.text_message);
Button btn_start = (Button) findViewById(R.id.btn_start);
message.setText("download");
new DownLoadTask().execute("zzz"); // 다운테스크 실행함수
}
class DownLoadTask extends AsyncTask<String, Integer, Boolean>{
@Override
protected void onPreExecute() { // 함수 호출 전 실행하는 메소드
super.onPreExecute();
progressbar.setMax(100);
message.setText("download start...");
}
@Override
protected Boolean doInBackground(String... strings) {
int progress = 0;
while(progress <= 100) {
// progress...
publishProgress(progress);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
progress += 5;
}
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {// 중간에 호출 되는 함수
super.onProgressUpdate(values);
int progress = values[0];
progressbar.setProgress(progress);
message.setText("progress : " + progress);
}
@Override
protected void onPostExecute(Boolean aBoolean) { // 끝나고 호출 되는 함수.
super.onPostExecute(aBoolean);
progressbar.setProgress(100);
message.setText("progress done");
}
}
}
'Android' 카테고리의 다른 글
[8일차] 핸들러카운트다운 실습 (0) | 2016.07.22 |
---|---|
[8일차] Handler Timeout 활용 (0) | 2016.07.22 |
[8일차]핸들러 다루기 (0) | 2016.07.22 |
[8일차] 안드로이드 쓰레드 동작방식 (0) | 2016.07.22 |
[8일차] ButterKnife (0) | 2016.07.22 |