안드로이드 에러 – Activity … Has Leaked Window

 1. 이 오류는…

 안드로이드를 어플리케이션을 한참 만들고 테스트를 하게 되면 수많은 오류들을 우리는 겪는다. 그중에서도 가장 많이 봤던것은 ‘NullPointException’, ‘ClassCastException’ 과 ‘IndexOutOfBoundException’이었다. 이런류의 오류는 개발자의 실수 에서 발생되고 고치기도 쉬운 형태의 오류이다. 이제 설명하고 또 해결방법을 제시할 ‘Has Leaked Window’오류에 대해서 알아보자.  이 오류메시지는 LogCat에서 확인 할 수 있는데 오류메시지의 대략적인 유형은 다음과 같다.

WindowManager(…): Activity … Has Leaked Window … $DecorView@… that was originaly added here

 보통 이 오류를 겪는 경우는 다이얼로그를 액티비티에서 사용하고 난 뒤에 발생하곤 한다. 처음에 이 오류를 만나고 나서는 매우 당황했던걸로 기억한다. 이 오류의 원인은 액티비티에서 다이얼로그를 사용하고 난뒤에 액티비티가 종료되고 난뒤 생성되어진 다이얼로그를 dismiss()하지 않아서 생기는 메모리 누수의 발생이 원인이다.

 다른 경우로는 Manifest에서 액티비티를 정의하지 않았을때 발생한다고 한다. 나는 이럴 때 has Leaked Window 오류를 겪지 않아서 잘은 모르겠다. 하지만 다이얼로그를 사용중에 미처 신경 쓰지 못하면 가끔씩 저 오류를 겪곤한다.

2. 해결 방법

  해결방법은 간단하다. 일단 다이얼로그의 dismiss()를 해주지 않은 경우라면 액티비티의 onStop()메소드나 onDestroy()등의 메소드를 오버라이드 한뒤 해당 메소드에 아래의 코드를 집어 넣어주면 된다.

 예제로서 오버라이드한 onDestroy()메소드 내에 해당 코드내용을 기술 한 것을 볼 수 있다.  만약 Manifest.xml에서 액티비티를 정의하지 않았다면 호출되는 액티비티의 클래스 명을 추가 하면 된다.

You may also like

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.