카테고리 없음

[Android] runOnUiThread() 안에서 다이얼로그 구현 시 생기는 BadTokenException 에러 수정

참깨빵위에참깨빵_ 2019. 12. 4. 20:40
728x90
반응형

AR core를 사용해 게임을 만들던 중 runOnUiThread() 안에 다이얼로그를 넣었더니 특정 조건이 되면 앱이 죽어버렸다.

 

https://blog.asamaru.net/2015/09/04/android-dialog-windowmanager-badtokenexception/

 

안드로이드에서 Dialog 사용시 WindowManager$BadTokenException 발생

안드로이드에서는 거의 모든 작업에 context를 사용한다. 그런데 이 context는 크게 application contet와 activity context가 있다. 문제는 사용시에 구분해서 사용하지 않는다는 것이다. 명시적으로 특정 context를 요구하지 않는다. 이로 인해 많은 혼란이 있고 crash도 많이 발생한다. 사실 오류를 줄이려면 가능한한 activity context를 사용하는 것이 좋다.(경험상...) 하지만 안드로이드에서는 가급적 a

blog.asamaru.net

https://blog.sangyoung.me/2016/12/28/BadTokenException/

 

안드로이드 BadTokenException 의 원인과 해결방법

안드로이드 앱을 테스트하다보면 UI를 핸들링할 때, 가끔 BadTokenException이 발생하는 것을 볼 수가 있다. 보통 빌드 시에는 알 수 없고, 런타임 시점에서 발생하는 점에서 약간 골치가 아프다.

blog.sangyoung.me

 

이 사이트들을 비롯해 스택 오버플로우 등지를 뒤지고 다녔지만 내 에러는 해결되지 않았다.

 

그래서 막무가내식으로 if문 안에 또 if문을 만들어서 getText().toString().equals("게임이 끝나는 문장");을 넣고 인텐트로 다른 액티비티로 넘겨버리니 내가 원하는 대로 동작했다.

그리고 finish()로 이전 액티비티를 죽이니 모양새는 그럴싸해졌다.

이것 말고도 좋은 해결법이 있을테지만 일단은 이렇게 해결한 것에 만족해야겠다.

반응형