본문 바로가기
안드로이드 스튜디오 앱 개발/코딩 오류

[Android Studio] MainActivity has leaked window 에러발생 해결하기 - 망댕이의 앱 개발(안드로이드 스튜디오)

by 망댕이 2024. 4. 16.
반응형

 

 
 

앱을 개발하다가 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 라는 오류가 발생하더군요.

처음 보는 오류여서 알아보니 액티비티가 종료된 후에 이러한 오류가 발생한다고 합니다.

 

 

해결하기 위해서는 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)
 

 

 

 

 

반응형