안녕하세요~ 챠니입니다! :)
android.view.WindowLeaked 에러에 대해서 짧게 알아보겠습니다.
android.view.WindowLeaked 원인
android.view.WindowLeaked의 원인은
1. 해당 Dialog를 show()를 통해서 호출한 뒤, Dialog를 종료하는 dismiss()없이 재 호출하는 경우에 생기는 문제
2. Dialog를 show()시키고 있는 과정에서 Acitvty가 종료될때 (Activity는 종료되지만 Dialog가 dismiss()처리가 안되었을때!)
생각보다 간단하죠?!
그렇다면 "android.view.WindowLeaked"를 대응하는 방법에 대해서 알아보겠습니다.
android.view.WindowLeaked 해결방법
as-is
var dialog = Dialog()
dialog.show()
...
dialog.show() //dismiss()없이 dialog 재호출
to-be
var dialog = Dialog()
dialog.show()
...
if(dialog.isShow() {
//dialog가 isShow일 경우 dismiss처리
dialog.dismiss()
}
dialog.show()
코드를 보면 그냥 딱! 이해가 가시죠?!
to-be는 설명을 돕기위해 예시를 든것이고 보통은 Dialog를 show하는 함수를 따로 구현하고 있을것이라 생각됩니다.
그렇다면 다음고 같은 show를 하는 함수에 isShow로 체크하여 dismiss를 처리하는 것도 하나의 방법입니다.
//DialogShow 함수처리 예시
fun dialogShow(dialog: Dialog){
if(dialog.isShow()){
dialog.dismiss()
}
dialog.show()
}
//[중요] Activity에서 처리
override fun onDestroy() {
super.onDestroy()
dialog.dismiss()
}
글 정리 & 소스코드
Dialog를 show()시키는 부분에서 isShow()일 경우 dismiss()를 처리하는 코드를 추가하여 종료없이 재 호출되는 경우에 대한 방어코드를 생성한다.
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android][kotlin] registerForActivityResult 사용방법 (0) | 2023.02.02 |
---|---|
[Android][kotlin] WebView 동영상 자동재생 해결방법 (0) | 2023.01.21 |
[Android][kotlin] Android Share 공유하기 기능 구현방법 (0) | 2023.01.20 |
[Android][kotlin] WebView에서 Daum 지도 두손가락 확대/축소 안되는 현상관련 (0) | 2023.01.19 |
[Android] 앱 삭제후에도 shared preference 남아있는 현상 해결하기 (0) | 2022.11.15 |
[Android][kotlin] Retrofit End of input at line 1 column 1 path $ 해결방법 (0) | 2022.08.25 |
[Android] EditText 속성정리 (0) | 2022.08.25 |
[Android] 'tools:replace="android:label"', 'tools:replace="android:theme"' 해결방법 (0) | 2022.08.23 |