아래는 코모스튜디오가 직접 만든 무료 앱이에요(한 번만 봐주세요 ^^)
이 에러는 참으로 갑자기 불쑥 나오기로 유명하다. 액티비티 종료 중에 컨텍스트를 사용하다가 잘 발생한다.
android.view.WindowManager$BadTokenException: Unable to add window
-- token android.os.BinderProxy@40b47bd8 is not valid; is your activity running?
1. 그래서 액티비티 종료 후에도 핸들러가 돌아 갈수도 있기에 갑자기 다이얼로그를 띄우는 등의 행동은 하지 말아야 할 것이다. 이럴때는 isFinishing()을 사용해서 예방 할 수 있다.
2. 또는 다른 액티비티와 연계되어서 발생 할 경우에는 getContext(), this.activity가 아닌 getParent()를 사용 하면 해결 할 수 있다.
3. 그런데 액티비티가 아닌 곳에서 발생한다면? 위 방법을 사용 할 수 없다. 참으로 희한하게도 context는 분명 들어 있는데 다이얼로그를 띄우면 죽는다. 액티비티를 종료 한 것도 아닌데... 보통 해당 프리퍼런스에서 다이얼로그를 띄운뒤 앱을 back키로 디스트로(destroy)이 한 뒤 다시 들어와서 해당 프리퍼런스의 다이얼로그를 띄우면 100% 죽는다. 이 경우에는 context를 static으로 만들어 주면 해결 된다.
액티비티는 디스트로이 되었다고 디스트로이 된 것이 아니다.
혼자서 잘 살고 있다. 즉, 개발자님들이 알아서 방어 해야 한다. 재 진입 시 언제나 좀비가 되어 죽이러 올지 모른다.
' [안드로이드 공부] > 프리퍼런스' 카테고리의 다른 글
[안드로이드] PreferenceFragmentCompat 사용시 테마 지정 (0) | 2017.08.15 |
---|---|
[안드로이드] 프리퍼런스가 업데이트 안된다면? (0) | 2016.04.19 |
CheckBoxPreference - check상태에 따라 활성, 비활성 바뀌게 하기 (0) | 2016.04.05 |
안드로이드 프리퍼런스 보이기 안보이기 (0) | 2015.12.24 |
Preference item 클릭 효과 만들기 (0) | 2015.10.10 |
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다. |
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요. |