오늘 안드로이드 개발중에 아래와 같은 exception이 떴다. 에러메시지의 내용을 보니, view hierarchy를 생성한 쓰레드만이 해당 view을 수정할 수 있다는 내용이었다.
CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
이 문제의 해결책은 UI를 수정하는 코드를 runOnUiThread()의 run() 함수 안에 넣으면 된다. runOnUiThread()는 current thread가 UI thread가 아닌 경우, UI thread의 이벤트큐에 실행할 작업을 넣어준다고 한다.
runOnUiThread(new Runnable() {
@Override
public void run() {
// UI 코드를 이 안으로 옮긴다.
}
});
• Android API 24 Documentation
public final void runOnUiThread(Runnable action) Runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread. Parameters: action - the action to run on the UI thread