본문 바로가기
안드로이드

[Android] android.view.WindowLeaked 에러 해결

by 코딩히어로 2022. 1. 24.
728x90

제목


프로젝트가 실행은 되는데 동작중에 생기는 에러가 발생하는데 해당 에러는 해결 방법이

아주 간단하지만 자주 발생할 수 있는 문제이므로 잘 짚고 넘어가야 합니다.

 

E/WindowManager( 1374): Activity com.test.example.MainActivity has leaked window com.android.internal.test.impl.PhoneWindow$DecorView@405446f8 that was originally added here
E/WindowManager( 1374): android.view.WindowLeaked: Activity com.test.example.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405446f8 that was originally added here
E/WindowManager( 1374):  at android.view.ViewRoot.<init>(ViewRoot.java:258)
E/WindowManager( 1374):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
E/WindowManager( 1374):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
E/WindowManager( 1374):  at android.view.Window$LocalWindowManager.addView(Window.java:424)
E/WindowManager( 1374):  at android.app.Dialog.show(Dialog.java:241)
E/WindowManager( 1374):  at com.test.example.MainActivity.showLoading(MainActivity.java:682)
E/WindowManager( 1374):  at com.test.example.view.HieraticalHostListView.loadData(HieraticalHostListView.java:84)
E/WindowManager( 1374):  at com.test.example.MainActivity.setupListViewStatus(MainActivity.java:479)
E/WindowManager( 1374):  at com.test.example.MainActivity.checkZabbixLogin(MainActivity.java:162)
E/WindowManager( 1374):  at com.test.example.MainActivity.onResume(MainActivity.java:279)
E/WindowManager( 1374):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
E/WindowManager( 1374):  at android.app.Activity.performResume(Activity.java:3832)
E/WindowManager( 1374):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110)
E/WindowManager( 1374):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135)
E/WindowManager( 1374):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1668)
E/WindowManager( 1374):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/WindowManager( 1374):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)

 

해당 에러에 대한 내용은 전부 살필 필요는 없고 어떠한 에러인지만 알면 됩니다.

내용 자체는 해당 프로젝트 내에서 Dialog를 show() 함수를 통해 호출한 뒤에

dismiss 없이 재 호출할 경우에 생기는 문제라고 해석이 가능합니다.

 

TestDialog test_dialog = new TestDialog();
test_dialog.show();
...
test_dailog.show();

 

위 구문과 같이 dialog에 대한 종료 없이 다시 호출을 할 경우 생기는 문제로

간단하게 아래와 같이 dialog의 사용이 끝나면 종료해주는 구문만 추가하면 됩니다.

 

TestDialog test_dialog = new TestDialog();
test_dialog.show();
test_dialog.dismiss();
...
test_dailog.show();

 

여기에서 dialog를 종료가 어느조건에 따라 실행되지 않으면

다시 해당 에러를 내뿜게 됩니다.

그래서 가장 기본적으로 사용한 dialog는 activity가 종료되거나 멈출 때 dismiss를 호출해줍니다.

 

@Override
protected void onDestroy() {
    super.onDestroy();
    test_dialog.dismiss();
}
728x90
반응형

댓글