일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이어베이스
- Clean Architecture
- Android
- HTTP
- android daum map
- 젯팩컴포즈
- android 지도
- 애드몹배너
- 안드로이드광고
- thread
- android kakao map
- dynamiclink
- RecyclerView
- 안드로이드
- JetpackCompose
- 선언형UI
- ImageView
- Android 애드몹
- 동적 링크
- glide
- Firebase
- component
- 컴포넌트
- 클린 아키텍처
- 안드로이드 카카오 지도
- 다이나믹 링크
- 애드몹광고
- 안드로이드컴포즈
- 안드로이드 라이브러리
- 아키텍처
- Today
- Total
코딩스토리
[Android/ 안드로이드] Error : android.view.ViewRootImpl$CalledFromWrongThreadException 본문
[Android/ 안드로이드] Error : android.view.ViewRootImpl$CalledFromWrongThreadException
라크라꾸 2020. 12. 17. 22:53android.view.ViewRootImpl$CalledFromWrongThreadException: at android.view.ViewRootImpl.checkThread (ViewRootImpl.java:9816) at android.view.ViewRootImpl.requestLayout (ViewRootImpl.java:1845) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at android.view.View.requestLayout (View.java:26338) at androidx.constraintlayout.widget.ConstraintLayout.requestLayout (ConstraintLayout.java:3172) at android.view.View.setFlags (View.java:16793) at android.view.View.setVisibility (View.java:11629) at com.lakue.lottoanalysis.activity.MainActivity$onResume$1$1.invokeSuspend (MainActivity.kt:217) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:56) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.kt:665)
앱을 실행했는데 다음과 같이 앱이 다운되는 현상이 발생할 경우가 있습니다.
CoroutineScope(Dispatchers.Main).launch {
// Show progress from UI thread
CoroutineScope(Dispatchers.Default).async {
// background thread
Gloval.winLottoData = db.userDao().getAll()
textView.visible = View.GONE
}.await()
// UI data update from UI thread
// Hide Progress from UI thread
}
오류의 원인은 TextView, ImageView와 같이 UI부분을 메인쓰레드에서 처리하게 되는데, 위의 코드에서는 textView.visible = View.GONE 코드는 UI관련 코드인데 background thread가 하는 곳에 있기 때문에 오류가 발생했습니다.
이 문제를 해결하기 위해서는 UI부분에 해당하는 부분을 메인쓰레드에서 처리해 주면 해결됩니다.
CoroutineScope(Dispatchers.Main).launch {
// Show progress from UI thread
CoroutineScope(Dispatchers.Default).async {
// background thread
Gloval.winLottoData = db.userDao().getAll()
}.await()
// UI data update from UI thread
// Hide Progress from UI thread
textView.visible = View.GONE
}