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
'Android' 카테고리의 다른 글
[Android] 안드로이드 센서와 NFC (0) | 2021.12.04 |
---|---|
[Android] XML처리와 안드로이드 멀티미디어 (0) | 2021.12.04 |
[Android] 스레드 (0) | 2021.10.13 |
[Android] 안드로이드 방송 수신자(Broadcast Receiver) (0) | 2021.10.07 |
[Android] 안드로이드 서비스 (0) | 2021.10.07 |