개발바닥곰발바닥
728x90

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

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

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

2. MainActivity 클래스 내부에 있는 경우

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

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

<code />
Handler mainHandler = new Handler(context.getMainLooper()); Runnable myRunnable = new Runnable() { @Override public void run() { //UI 업데이트 } }; mainHandler.post(myRunnable);

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

<code />
Handler mainHandler = new Handler(Looper.getMainLooper()); Runnable myRunnable = new Runnable() { @Override public void run() { //UI 업데이트 } } mainHandler.post(myRunnable);

더 짧은 코드

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

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

728x90
profile

개발바닥곰발바닥

@bestinu

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