main 스레드와 새로만든 스레드 사이를 혼용해서 스레드를 사용하고자 할때 (UI 에 어떤 정보를 넘겨서 보여주고 싶을때 유용하다)
package com.jjjjj.myasynctask;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
ProgressBar progressBar;
int value;
BackGroundTask task = new BackGroundTask();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = findViewById(R.id.progressBar);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
task.execute(); //BackGroundTask-AsyncTask 를 실행시킨다
}
});
Button cancel = findViewById(R.id.button2);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
task.cancel(true);
}
});
}
class BackGroundTask extends AsyncTask<Integer, Integer, Integer>{
//onPreExecute, onPostExecute, onProgressUpdate 전과 후에 UI 업데이트를 하고 싶을 때 사용 할 수 있다
@Override
protected void onPreExecute() { //스레드 실행 전
//super.onPreExecute();
value = 0;
progressBar.setProgress(value);
}
@Override
protected void onPostExecute(Integer integer) { //스레드 실행 후(스레드 종료 후)
//super.onPostExecute(integer);
progressBar.setProgress(0);
}
@Override
protected void onProgressUpdate(Integer... values) { // update, publishProgress(value); 이걸 통해서 이쪽으로 넘어온다
//super.onProgressUpdate(values);
progressBar.setProgress(values[0].intValue());
}
@Override
protected Integer doInBackground(Integer... integers) { //스레드로 동작 하는 부분
//return null;
while(isCancelled() == false)
{
value += 1;
if(value >= 100)
{
break;
}
//onProgressUpdate 를 호출한다
publishProgress(value);
try{
Thread.sleep(1000);
}
catch (Exception e)
{
}
}
return value; //onPostExecute 가 호출되게 된다
}
}
}
기본 화면
실행 버튼 누르면 progress bar 가 증가한다
취소 누르면 더이상 progress 바가 증가 하지 않는다
반응형
'App' 카테고리의 다른 글
android Handler 로 스레드 실행 post (0) | 2022.10.27 |
---|---|
Android : Activity (0) | 2022.10.19 |
Java overriding methods when creating new instance of a class (0) | 2022.10.13 |
(View,ViewGroup) 안드로이드 View와 ViewGroup (0) | 2022.10.12 |