안드로이드 개발

ThreadException: Only the original thread that created a view hierarchy can touch its views 간단 해결 방법

피커 2022. 12. 28. 14:54
728x90
반응형

해당 에러는 안드로이드 메인 스레드 동작 중 UI 관련 업데이트를 할때 발생하는 에러이다.

에러 상황

 

1. 개념

  -. 안드로이드에 국한되는 이슈는 아니며, Microsoft의 OS에서도 동일하다.

     스레드에서 UI를 업데이트 하기 위해서는 특별한 동작이 필요하다.

    여기서는 가장 간단한 방법을 사용해서 해결해보려한다.

 

 

2. 해결 방법

  -. 위 스크린샷에서 보면 파란색 부분이 textview의 text를 업데이트하려한다.

     이때 UI 스레드와 충돌이 발생하므로 runOnUiThread() {} 를 추가해주면 해결된다.

   

에러 발생 코드  에러 해결된 코
it.lines().forEach { line ->
    Log.d(TAG, "sendGet: $line")
    runOnUiThread() {
        findViewById<TextView>(R.id.textView).text = line
    }
}
it.lines().forEach { line ->
    Log.d(TAG, "sendGet: $line")
    runOnUiThread() {
        findViewById<TextView>(R.id.textView).text = line
    }
}

 

3. 결론

   단지 runOnUiThread 한줄만 추가해줘도 해결이 되는 간단한에러이지만, 깊숙히 파고들면 어려운 개념이다.

   간단히 해결하고 다음 구현을 하시기를 바란다.

   시간날때 파고드는것도 추천,

 

 

4. 관련 문서

runOnUiThread 관련 문서
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.
반응형