안녕하세요, 처음으로 마켓에 올린 어플에서 다음과 같은 에러가 보고 되었는데요, 메인 쓰레드가 아닌 다른 쓰레드에서 메인쓰레드의 뷰를 건드린다는 내용으로 이해를 했습니다. 로그는 다음과 같습니다.
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
at android.view.ViewRoot.requestLayout(ViewRoot.java:594)
at android.view.View.requestLayout(View.java:8288)
at android.view.View.requestLayout(View.java:8288)
at android.view.View.requestLayout(View.java:8288)
at android.view.View.requestLayout(View.java:8288)
at android.view.View.requestLayout(View.java:8288)
at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:254)
at android.view.View.requestLayout(View.java:8288)
at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:254)
at android.view.View.setBackgroundDrawable(View.java:7645)
at com.cauly.android.ad.AdView$2.run(AdView.java:806)
로그 하단에 보면 카울리 쪽 소스의 AdView.java에서 setBackgroundDrawable을 하다가 익셉션이 발생한 게 아닌가 싶은데요, AdView.java를 뒤져보니 의심가는 부분이 나오긴 했습니다.
//의심가는 Adview.java내의 코드 부분
AdView.adLayout.setBackgroundDrawable(background);
위 코드가 AdView.java 내의 광고를 다시 로드하는 메소드 내부의 run()객체 내부에 있구요, 에러의 원인이 되는 곳이라 의심하고 있습니다. 재현이라도 되면 더 분석해보겠건만, 어찌하면 좋을까요 ㅎㅎ




제가알기로는 안드로이드에 UIThread가 메인스레드고
사용자가 직접 생성한 스레드에서는 ui스레드를 건드리면 에러가나는걸로 알고있는데..
아마도 run에서 액티비티의 요소등을 변환등을 시도하면 에러가 나지 않을까싶은데요
저도 정확한 정보는 아니라서 확답은 못드리겠네요 ㅜㅜ