반응형
![](https://blog.kakaocdn.net/dn/b0Pdar/btsGCXhLZEL/hmDg0rDkUiZZqk7OoTl4Z1/img.png)
앱을 개발하다가 Activity로 만든 dialog를 띄워 종료 버튼을 누르면 앱이 종료될 수 있도록
해당 dialog_warning 레이아웃을 불러와 nobutton 눌렀을 때는 그냥 dialog 종료, yesbutton을 누를 때 앱이 종료되도록 코드를 짜놨습니다.
앱을 실행시켜도 정상적으로 잘 돌아갔구요
@Override
public void onBackPressed() {
Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.dialog_warning);
dialog.show();
Button nobutton = (Button)dialog.findViewById(R.id.noButton);
Button yesbutton = (Button)dialog.findViewById(R.id.yesButton);
nobutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
yesbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
그런데 yesbutton을 눌러 앱이 종료된 후 Logcat 메세지에 MainActivity has leaked window 라는 오류가 발생하더군요.
처음 보는 오류여서 알아보니 액티비티가 종료된 후에 이러한 오류가 발생한다고 합니다.
![](https://blog.kakaocdn.net/dn/bW4EaO/btsGFpxwymv/Ytp8rcqNJnv4SZeXe49GBk/img.png)
해결하기 위해서는 dismiss() 메소드를 추가시켜줘야한다는 것이다.
아래와 같이 yesbutton의 onClick 안에 dismiss() 메소드를 추가시켜주면 오류 없이 앱이 종료가 된다.
yesbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
finish();
}
});
04 16:55:23.307 7487-7487/org.techtown.quicknote E/WindowManager: android.view.WindowLeaked: Activity org.techtown.quicknote.MainActivity has leaked window DecorView@ae0050d[MainActivity] that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:733)
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:717)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:399)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109)
at android.app.Dialog.show(Dialog.java:340)
at org.techtown.quicknote.MainActivity.onBackPressed(MainActivity.java:123)
at android.app.Activity.onKeyUp(Activity.java:3784)
at android.view.KeyEvent.dispatch(KeyEvent.java:2866)
at android.app.Activity.dispatchKeyEvent(Activity.java:4090)
at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:124)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:142)
at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:601)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:60)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3106)
반응형