profile image

L o a d i n g . . .

반응형



안드로이드 AsyncTask 사용하기

use the Android AsyncTask


쓰레드에서 UI 객체에 접근하기 위해서는 직접 접근이 가능한 핸들러를 사용해야 한다.

하지만 핸드러를 사용하면 코드가 복잡해지는데 이를 쉽고 간단하게 할 수 있는 클래스가 AsyncTask이다.

이 클래스를 상속하여 새로운 클래스를 만들면 그 안에 쓰레드를 위한 코드와 UI 접근 코드를 한번에 사욯할 수 있다.


To access UI object from the thread handler with direct access must be used.

However, AsyncTask is an easy and simple class that can be used to complicate the code

By inheriting this class and creating a new class, the code for the thread and the UI access code can be one step


// AsyncTask 클래스 (AsyncTask Class)
class ProgressTask extends AsyncTask<String, Integer, Integer> {

int value = 0;

// 새로 만든 쓰레드에서 백그라운드 작업을 수행

// perform background poeration on newly created thread
@Override
protected Integer doInBackground(String... strings) {
while(true) {
if (value == 100) {
break;
}
value ++;

// onProgressUpdate 메소드 호출됨

// onProgressUpdate method run
publishProgress(value);


try {
Thread.sleep(200);
} catch (Exception e){}
}
return value;
}

AsyncTask를 사용하기 위해서는 AsyncTask를 상속받는 클래스를 하나 만들도록 한다.

그리고 doInBackground를 오버라이드하는데 이 메소드는 쓰레드에 입력해야하는 코드를 이 메소드에 입력하면 된다.

수행될 백그라운드 작업을 하는 메소드이다.

결과에 사용될 값을 publishProgress 메소드를 통해 onProgressUpdate 메소드에 전달을 한다.


To user AsyncTask create a class that inherits AsyncTask

And override the doInBackground, which you can type in the code that you must enter into the thread on this

A method for performing background work be performed.

Pass the value to the onProgressUpdate method through the publicProgress method


// 백그라운드 작업의 진행 상태를 표시하기 위해 호출

// run to display the progress of the background operation
// 작업 수행 중간 중간 UI 객체에 접근하는 경우에 사용

// performing an action used when accessing an UI object
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);

progressBar.setProgress(values[0].intValue());
textView.setText("현재 값 : " + values[0].intValue());
}

onProgressUpdate메소드를 오버라이드한다.

이 메소드는 UI객체에 직접 접근하는 경우에 사용하는데 핸들러의 역할을 한다.

doInBackground에서 넘어온 데이터는 배열형태로 받게 된다.


Override the onProgressUpdate mehtod

This mehtod acts as a handler for direct access to UI object

Data from doInBackground will be received in an array format


// 백그라운드 작업이 끝난 후에 호출

// run after background operation is finished
// 메인 쓰레드에서 실행되며 메모리 리소스를 해제하는 등의 작업에 사용

// run on the main thread and is used for operations such as disabling memory redources
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);

Toast.makeText(getApplicationContext(), "완료됨", Toast.LENGTH_LONG).show();
}

백그라운드 작업이 끝난 후에 메모리 리소를 해제하는 등의 작업을 하는 onPostExecute메소드를 오버라이드 한다.


Override the onPostExecute method after background operation for example, to turn off memory loss


반응형
복사했습니다!