태그 보관물: memory-leaks

memory-leaks

활동이 원래 추가 된 창을 유출했습니다 at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 05-17 18:24:57.069: ERROR/WindowManager(18850):

이 오류는 무엇이며 왜 발생합니까?

05-17 18:24:57.069: ERROR/WindowManager(18850): Activity com.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 that was originally added here
05-17 18:24:57.069: ERROR/WindowManager(18850): android.view.WindowLeaked: Activity ccom.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 that was originally added here
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.ViewRoot.<init>(ViewRoot.java:231)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.Dialog.show(Dialog.java:239)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.mypkg.myP$PreparePairingLinkageData.onPreExecute(viewP.java:183)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.os.AsyncTask.execute(AsyncTask.java:391)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.mypkg.myP.onCreate(viewP.java:94)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.access$2200(ActivityThread.java:126)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.os.Looper.loop(Looper.java:123)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at android.app.ActivityThread.main(ActivityThread.java:4595)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at java.lang.reflect.Method.invokeNative(Native Method)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at java.lang.reflect.Method.invoke(Method.java:521)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-17 18:24:57.069: ERROR/WindowManager(18850):     at dalvik.system.NativeStart.main(Native Method)


답변

활동을 종료 한 후 대화 상자를 표시하려고합니다.

[편집하다]

이 질문은 안드로이드 개발자를위한 Google의 최고 검색 중 하나이므로 주석에서 중요한 점을 몇 개 추가하면 주석 심도 대화에 가지 않고 향후 조사자에게 더 도움이 될 수 있습니다.

답변 1 :

활동을 종료 한 후 대화 상자를 표시하려고합니다.

답변 2

이 오류는 일부 상황에서 약간의 오해의 소지가 있습니다 (응답은 여전히 ​​정확하지만). 예를 들어 처리되지 않은 예외가 AsyncTask에서 발생하여 활동이 종료되고 열린 진행 대화 상자 에서이 예외가 발생했습니다. 로그에서 ‘실제’예외는 조금 더 일찍

답변 3

활동을 종료하기 전에 생성 한 Dialog 인스턴스 (예 : onPause () 또는 onDestroy ())에서 dismiss ()를 호출합니다.


답변

해결책은 에서 종료하기 전에 에서 생성 한를 호출 dismiss()하는 Dialog것입니다 ( 예 : in) . 를 떠나기 전에 모든 S & S를 닫아야합니다 .viewP.java:183ActivityonPause()WindowDialogActivity


답변

를 사용하는 경우 AsyncTask해당 로그 메시지가 기만적 일 수 있습니다. 로그를 살펴보면 다른 방법으로 오류가 발생했을 수 있습니다. 아마도 귀하의 doInBackground()방법으로 AsyncTask인해 전류 Activity가 폭발하여 AsyncTask다시 발생하면 나머지는 알 것입니다. 일부 다른 사용자는 이미 다음과 같이 설명했습니다 🙂


답변

내가 실수로 호출하여이 오류를 트리거 hide()대신 dismiss()AlertDialog.


답변

switch 문에서 break call 문을 놓친 경우 (예를 들어) 실수로을 finish()표시 한 후 실수로 전화 하여이 예외를 얻을 수 있습니다 AlertDialog

   @Override
   public void onClick(View v) {
    switch (v.getId()) {
        case R.id.new_button:
            openMyAlertDialog();
            break; <-- If you forget this the finish() method below
                       will be called while the dialog is showing!
        case R.id.exit_button:
            finish();
            break;
        }
    }

finish()방법은 종료됩니다 Activity,하지만이 AlertDialog여전히 표시됩니다!

따라서 스레딩 문제 나 복잡한 코딩 등을 찾으려면 코드를 열심히 쳐다볼 때 나무의 숲을 놓치지 마십시오. 때로는 누락 된 break 문처럼 간단하고 멍청한 것일 수도 있습니다. 🙂


답변

이 질문에 대한 답변은 모두 정확했지만 실제로 왜 그런지 이해하는 것이 약간 혼란 스럽습니다. 약 2 시간 동안 놀아 본 후 (이 경우)이 오류의 이유가 나에게 맞았습니다.

다른 답변을 읽음으로써 X has leaked window DecorView@d9e6131[]오류가 있음은 앱을 닫을 때 대화 상자가 열린 것을 의미합니다. 그런데 왜?

대화 상자가 열려있는 동안 다른 이유로 앱이 다운되었을 수 있습니다.

코드의 버그로 인해 앱이 종료되어 다른 오류로 인해 앱이 닫히는 동안 대화 상자가 계속 열려 있습니다.

따라서 논리를 살펴보십시오. 첫 번째 오류를 해결하면 두 번째 오류가 스스로 해결됩니다.

하나의 오류가 다른 오류를 일으켜 DOMINOS와 같은 다른 오류가 발생합니다!


답변

이 문제는 활동을 종료 한 후 대화 상자를 표시하려고 할 때 발생합니다.

방금 다음 코드를 작성 하여이 문제를 해결했습니다.

@Override
public void onDestroy(){
    super.onDestroy();
    if ( progressDialog!=null && progressDialog.isShowing() ){
        progressDialog.cancel();
    }
}

기본적으로 progressDialog를 시작한 클래스에서 onDestroy 메소드를 대체하고이 방법으로 수행하십시오. “액티비티가 창을 누설했습니다”문제를 해결했습니다.