Pertanyaan Aktivitas telah membocorkan jendela yang semula ditambahkan


Apa kesalahan ini, dan mengapa itu terjadi?

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)

933
2018-05-17 15:51


asal


Jawaban:


Anda mencoba menampilkan Dialog setelah Anda keluar dari suatu Kegiatan.

[EDIT]

Pertanyaan ini adalah salah satu penelusuran teratas di google untuk pengembang android, Oleh karena itu, tambahkan beberapa poin penting dari komentar, yang mungkin lebih bermanfaat bagi penyidik ​​di masa depan tanpa membahas percakapan komentar secara mendalam.

jawaban 1 :

Anda mencoba menampilkan Dialog setelah Anda keluar dari suatu Kegiatan.

Jawaban 2 

Kesalahan ini dapat sedikit menyesatkan dalam beberapa keadaan (meskipun   Jawabannya masih benar-benar akurat) - yaitu dalam kasus saya, sebuah   Eksepsi tidak tertangani dilemparkan dalam AsyncTask, yang menyebabkan   Aktivitas untuk shutdown, maka progressdialog terbuka menyebabkan ini   Pengecualian .. jadi pengecualian 'nyata' sedikit lebih awal di log

Jawaban 3 

Call dismiss () pada contoh Dialog yang Anda buat sebelum keluar dari Anda   Aktivitas, mis. di onPause () atau onDestroy ()


1266
2018-05-17 15:54



Solusinya adalah menelepon dismiss() pada Dialog yang Anda buat viewP.java:183 sebelum keluar Activity, mis. di onPause(). Semua Windows &Dialogs harus ditutup sebelum meninggalkan sebuah Activity.


370
2018-05-17 18:50



Jika Anda menggunakan AsyncTask, mungkin pesan log itu bisa menipu. Jika Anda mencari di log Anda, Anda mungkin menemukan kesalahan lain, mungkin satu di Anda doInBackground() metode Anda AsyncTask, yang membuat Anda saat ini Activity untuk meledak, dan dengan demikian begitu AsyncTask datang kembali .. yah, kamu tahu sisanya. Beberapa pengguna lain sudah menjelaskan bahwa di sini :-)


100
2017-07-20 18:23



Anda bisa mendapatkan pengecualian ini hanya dengan kesalahan sederhana / bodoh, dengan (misalnya) secara tidak sengaja memanggil finish() setelah ditampilkan AlertDialog, jika Anda melewatkan pernyataan putus panggilan dalam pernyataan switch ...

   @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;
        }
    }

Itu finish() metode akan menutup Activity, tetapi AlertDialog masih menampilkan!

Jadi ketika Anda menatap kode dengan seksama, mencari masalah pengeditan yang buruk atau pengkodean yang rumit dan semacamnya, jangan lupakan hutan untuk pepohonan. Kadang-kadang bisa menjadi sesuatu yang sederhana dan bodoh seperti pernyataan istirahat yang hilang. :)


52
2017-10-08 08:48



Saya memicu kesalahan ini dengan salah memanggil hide() dari pada dismiss() pada AlertDialog.


48
2017-12-07 19:29



Masalah ini muncul ketika mencoba untuk menunjukkan Dialog setelah Anda keluar dari suatu Kegiatan.

Saya baru saja memecahkan masalah ini hanya dengan menuliskan kode berikut:

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

Pada dasarnya, dari kelas mana Anda memulai progressDialog, mengganti metode onDestroy dan lakukan dengan cara ini. Ini memecahkan masalah "Activity is leaked window".


27
2017-08-30 06:55



Saya baru-baru ini menghadapi masalah yang sama.

Alasan di balik masalah ini adalah bahwa aktivitas yang ditutup sebelum dialog ditutup. Ada berbagai alasan untuk hal di atas terjadi. Yang disebutkan dalam posting di atas juga benar.

Saya mendapat suatu situasi, karena di dalam utas, saya memanggil suatu fungsi yang melemparkan pengecualian. Karena itu jendela itu diberhentikan dan karenanya pengecualian.


19
2017-12-08 21:12



Saya memiliki pesan kesalahan yang tidak jelas dan tidak tahu mengapa. Mengingat petunjuk dari jawaban sebelumnya, saya mengubah panggilan non-GUI saya ke mDialog.finish () menjadi mDialog.dismiss () dan kesalahan menghilang. Ini tidak mempengaruhi perilaku widget saya tetapi itu membingungkan dan bisa saja telah menandai kebocoran memori penting.


11
2018-03-27 05:49



Saya mendapatkan log ini di aplikasi pemutar video saya. Pesan-pesan ini dilemparkan saat pemutar video ditutup. Menariknya, saya digunakan untuk mendapatkan log ini sekali dalam beberapa berjalan secara acak. Juga aplikasi saya tidak melibatkan apa pun progressdialog. Akhirnya, saya mengatasi masalah ini dengan implementasi di bawah ini.

@Override
protected void onPause()
{
    Log.v("MediaVideo", "onPause");
    super.onPause();
    this.mVideoView.pause();
    this.mVideoView.setVisibility(View.GONE);
}

@Override
protected void onDestroy()
{
    Log.v("MediaVideo", "onDestroy");
    super.onDestroy();
}

@Override
protected void onResume()
{
    Log.v("MediaVideo", "onResume");
    super.onResume();
    this.mVideoView.resume();
}

Ganti OnPause dengan panggilan ke mVideoView.pause() dan set visibility untuk GONE. Dengan cara ini saya bisa menyelesaikan "Activity has leaked window"masalah log kesalahan.


11
2018-06-26 13:54



Hilangkan dialog saat aktivitas merusak

@Override
protected void onDestroy()
{
    super.onDestroy();
    if (pDialog!=null && pDialog.isShowing()){
        pDialog.dismiss();
    }
}

10
2018-06-27 11:56



Jawaban atas pertanyaan ini semuanya benar, tetapi sedikit membingungkan bagi saya untuk benar-benar mengerti mengapa. Setelah bermain-main selama sekitar 2 jam, alasan untuk kesalahan ini (dalam kasus saya) memukul saya:

Anda sudah tahu, dari membaca jawaban lain, yang dimiliki X has leaked window DecorView@d9e6131[] kesalahan berarti dialog terbuka saat aplikasi Anda ditutup. Tapi kenapa?

Bisa jadi, aplikasi Anda mengalami gangguan karena beberapa alasan lain saat dialog Anda terbuka

Ini menyebabkan penutupan aplikasi Anda karena beberapa bug di kode Anda, yang menyebabkan dialog tetap terbuka pada saat yang sama saat aplikasi Anda ditutup karena kesalahan lainnya.

Jadi, lihatlah logis Anda. Memecahkan kesalahan pertama, dan kemudian kesalahan kedua akan menyelesaikan sendirienter image description here

Satu kesalahan menyebabkan yang lain, yang menyebabkan yang lain, seperti DOMINOS!


10
2018-06-27 00:31