728x90
반응형
1.Async 클래스 사용
- AsynTask 클래스
- 작업 스레드와 관련된 복잡한 부분을 쉽게 처리해주는 클래스
- onPreExecute() : UI 스레드에서 실행되며, 작업을 설정하는데 사용됨
- doInBackground() : 작업 스레드에서 수행할 작업을 기술하는 곳임
- onProgressUpdate() : UI 스레드에서 호출되고, 작업 진행률 업데이트에 사용됨
- onPostExecute() : 작업 완료되면 UI에 결과를 업데이트하는데 사용됨
- AsyncTask<Params, Progress, Result>
- Params : 실행 시에 작업에 전달되는 값의 타입임
- Progress : 작업 진행 정도를 나타내는 값의 타입
- Result : 작업 결과 값을 나타내는 값의 타입
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal">
</ProgressBar>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="카운터 작업 시작">
</Button>
</LinearLayout>
package kr.co.asynctask;
import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.content.AsyncTaskLoader;
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 {
private ProgressBar mProgress;
private int mProgressStatus = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);
mProgress = findViewById(R.id.progress_bar);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
new CounterTask().execute(0);
}
});
}
class CounterTask extends AsyncTask<Integer, Integer, Integer>{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//매개변수에 ...와 같이 마침표 3개 붙임 => 가변 매개 변수
//백그라운드에서 실행됨
@Override
protected Integer doInBackground(Integer... integers) {
while(mProgressStatus < 100){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mProgressStatus++;
publishProgress(mProgressStatus);
}
return null;
}
//프로그레스 바를 업데이트함
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mProgress.setProgress(mProgressStatus);
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
mProgress.setProgress(mProgressStatus);
}
}
}
[결과 출력]
728x90
반응형
'App > Android Java' 카테고리의 다른 글
Android_Java(33) - MusicService (0) | 2022.02.23 |
---|---|
Android_Java(32) - ImageDownload (0) | 2022.02.15 |
Android_Java(30) - ThreadBasic(2) (0) | 2022.02.15 |
Android_Java(29) - ThreadBasic (1) | 2022.02.15 |
Android_Java(28) - AudioPlay (0) | 2022.02.15 |
댓글