본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][Kotlin] android.view.WindowLeaked 에러 대응

by MinChan-Youn 2023. 1. 7.

안녕하세요~ 챠니입니다! :)

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

 

younminchan - Overview

안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

github.com