반응형
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() {
//작업 내용
}
});
}
반응형
댓글