앱 만들기/안드로이드

안드로이드 핸들러 구현

나도 처음이야 2021. 9. 4.

https://soo0100.tistory.com/1600?category=847049 

 

안드로이드 작업 쓰레드 만들어서 오래걸리는 일 해보기

https://soo0100.tistory.com/1599?category=847049 안드로이드 MainThread 에서 오래 걸리는 일을 하면 안되는 이유. 안드로이드에서 우리가 프로젝트를 만들면, 기본적으로 MainThread 하나를 가지고 시작합니다..

soo0100.tistory.com

 

지난 시간 우리는 작업 스레드를 별도로 만들어서 오래 걸리는 일을 해보았습니다.

오래 걸리는 작업은 잘 소화를 했지만, 메인 스레드의 UI를 갱신하면서 앱이 죽게 되었습니다.

즉, 작업 스레드에서는 메인 스레드의 UI 오브젝트를 직접 호출하면 안 되는 것이 안드로이드의 룰입니다.

그 해결방법 중 하나로 핸들러를 사용해서

메인 쓰레드의 UI 오브젝트를 업데이트해보겠습니다.

 

Handler handler = new Handler();

//버튼을 클릭했을 때 오래 걸리는 일을 하고 메인 스레드 UI를 업데이트하겠습니다.
public void onClicked(View view){

 

@Override
public void run() {
for (int i = 0; i <= 100; i++) {
  try {
      Thread.sleep(1000);
      } catch (InterruptedException e) {
      e.printStackTrace();
    }
int value = i;
handler.post(new Runnable() {
@Override
     public void run() {

          // 프로그래스 바에 진행률을 표시한다.
          progressBar.setProgress(value);
          // 텍스트 뷰 진행률을 표시.
          textView.setText(value + "%");
         }

       });
      }

   }
  }). start();

}

 

handler.post 라는 함수 인자 값으로 Runnable() 익명 클래스를 재정의 해줍니다.

run() 함수 오버라이딩 시 메인스레드 UI를 업데이트하면 되겠습니다.

정리 해보자면 하기와 같습니다.

 

1. 메인쓰레드는 UI 에 관련된 일을 하는 중심쓰레드 이기에

   오래 걸리는 작업은 하지 않는다.

 

2. 오래 걸리는 작업은 백그라운드 혹은 작업쓰레드에서 별도로 진행한다.

  

3. 작업쓰레드에서 메인쓰레드 UI를 업데이트 하기 위해서는

   핸들러 혹은 AsynchTask 헬퍼 클래스를 사용해야 한다.

    (핸들러는 쓰레드간에 메시지를 주고 받는 역할을 해준다. )

    

 

오늘은 안드로이드 핸들러 예제를 살펴보았습니다.

다음 시간에는 AysnchTask 헬퍼 클래스를 통해서 오래 걸리는 작업과 메인쓰레드 UI 업데이트 작업을

해보겠습니다. 감사합니다. 

반응형

댓글