본문 바로가기
Language/Android

[Android] 안드로이드_UI Thread 외부에서 UI 작업 호출하기 (feat. runOnUiThread)

by 썸머워즈 2019. 11. 23.
반응형


runOnUiThread 개념 및 사용


UI Thread 외부에서 UI를 호출해 작업하려다보니 에러가 발생하는데


android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


이게 안드로이드 OS 는 UI 자원 사용을 UI Thread에서만 가능하도록 만들었기 때문에 


외부에서 접근하여 작업하려다보니 생기는 에러라고 한다.


손쉽게 runOnUiThread를 이용하여 외부에서 접근하는 방법에 대해 알아보자.


Activity의 runOnUiThread를 이용하여 해당 작업을 UI Thread를 호출해 작업하면


에러없이 잘 작동한다.

new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
// 처리할 작업 내용
}
});
}
}).start();

근데 내가 하려는건 다른 클래스에서의 UI작업이라 Activity가 아니라서


runOnUiThread를 호출할 수 없는 상황이였다...


그래서 보통 다들 전달해주는 Context를 이용하여 runOnUiThread를 호출하였더니 잘되더라;


new Thread(new Runnable() {
@Override
public void run() {
((MainActivity)mContext).runOnUiThread(new Runnable(){
@Override
public void run() {
// 처리할 작업 내용
}
});
}
}).start();

뭔가 더 있을지 모르겠지만 현업에서 보는 코드는


일단 new Thread를 쓰지않고 바로 runOnUiThread를 호출하는 방법도있다.


일단 구현되있는 방법이라 잘 돌아가는거같은데


원리는 잘 모르겠다.


private void processMethod() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//작업 내용
}
});
}

반응형


댓글

TOP