코딩하는 일용직 노동자

Must be called from main thread of fragment host 에러 처리 본문

안드로이드

Must be called from main thread of fragment host 에러 처리

bacass 2021. 9. 8. 14:56

안드로이드 개발중 경험한 에러와 해결방법을 공유합니다.

앱실행 중에 아래와 같은 에러가 발생하면서 앱이 죽었습니다.

 

java.lang.IllegalStateException: Must be called from main thread of fragment host


Fragment에서 부모 Activity로 ViewPager의 페이지 이동을 시키려고 하는데 에러가 났습니다.

public class AndroidBridge { @JavascriptInterface public void OnAppEvent(String data) { switch (event) { case "move_to_main": Fragment_Main.getInstance().mViewPager.setCurrentItem(1); break; } ...


에러 메세지를 보니 부모 액티비티의 메인 쓰레드(UI 쓰레드)에서 호출되야 한다고 합니다.
지금은 액티비티가 아닌 Fragment의 쓰레드에서 호출되어서 에러가 발생했습니다.

부모 액티비티의 메인 쓰레드(UI 쓰레드)에서 실행되게 하려면 아래처럼 runOnUiThread() 함수로 감싸주면 됩니다.

getActivity().runOnUiThread(new Runnable() { @Override public void run() { Fragment_Main.getInstance().mViewPager.setCurrentItem(1); } });