개발바닥곰발바닥
728x90

안드로이드 Worker Thread에서 UI Thread 실행하기

안드로이드에서 메인스레드가 아닌 스레드에서 UI 를 업데이트하면 예외가 발생하므로 반드시 UI 업데이트는 메인스레드에서 해줄 필요가 있다.

그런데 만약에 Worker Thread에서 중간에 UI를 업데이트해야 한다면 어떻게 해야할까?
방법은 여러가지인데 크게 컨텍스트에 액세스 할 수 있는가 없는가와, Activty 클래스 내부에 있는지를 확인한다.

MainActivity 클래스 내부에 있는 경우

MainActivity.this.runOnUiThread(new Runnable()) {
    @override
    public void run() {
        //UI 업데이트
    }
}

백그라운드 스레드에 Context 객체가 있는 경우

Handler mainHandler = new Handler(context.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        //UI 업데이트
    }
};
mainHandler.post(myRunnable);

백그라운드 스레드에 Context객체가 없는 경우

Handler mainHandler = new Handler(Looper.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        //UI 업데이트
    }
}
mainHandler.post(myRunnable);

더 짧은 코드

new Handler(Looper.getMainLooper()).post(new Runnable()) {
    @Override
    public void run() {
        //UI 업데이트
    }
}

이렇게 하면 작업 스레드에서도 메인 스레드를 불러와서 UI 업데이트를 할 수 있다!

728x90
profile

개발바닥곰발바닥

@bestinu

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!