Подтвердить что ты не робот

Android.view.WindowLeaked

inviteBu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(ChoiceList.size()>0)
             {

                    LayoutInflater factory = LayoutInflater.from(MobileConnectActivity.this);
                    final View textEntryView = factory.inflate(R.layout.invite_dialog, null);
                    final EditText et =(EditText) textEntryView.findViewById(R.id.usercontent_edit);

                   dia= new AlertDialog.Builder(MobileConnectActivity.this)
                        .setTitle(getString(R.string.invite_input_content))
                        .setView(textEntryView)
                        .setPositiveButton(getString(R.string.invite_send), new DialogInterface.OnClickListener() {
                            public void onClick(final DialogInterface dialog, int whichButton) {
                                dialog.dismiss();
                                 if(et.getText().toString()==null && et.getText().equals("") )
                                {
                                    Toast.makeText(getApplicationContext(), getString(R.string.invite_content_check), Toast.LENGTH_SHORT).show();
                                }
                                 else{


                                     new AsyncTask<Void, Void, String>() {

                                         CustomDialog mProgressBar = new CustomDialog(MobileConnectActivity.this, R.style.dialog);

                                        protected void onPreExecute() {

                                            mProgressBar.show();
                                        };

                                        protected void onCancelled() {
                                            mProgressBar.hide();
                                        };

                                        @Override
                                        protected String doInBackground(Void... params) {

                                                ChoiceList=removeDuplicateList(ChoiceList);
                                                for(int i=0;i<ChoiceList.size();i++)
                                                {
                                                    Log.i("aaa",""+ChoiceList.get(i));
                                                    sendSMS(ChoiceList.get(i), et.getText().toString());
                                                }
                                            return "OK";
                                        }

                                        protected void onPostExecute(String response) {
                                            mProgressBar.hide();

                                            if (response != null ) {

                                                 Toast.makeText(getApplicationContext(), getString(R.string.invite_succeed), Toast.LENGTH_SHORT).show();
                                                 Intent intent = new Intent();
                                                    intent.setClass(MobileConnectActivity.this, inviteMainActivity.class);
                                                    startActivity(intent);

                                                MobileConnectActivity.this.finish();
                                            } else {
                                                //mHelper.showResponseErrorMessage(response);
                                                Intent intent = new Intent();
                                                intent.setClass(MobileConnectActivity.this, inviteMainActivity.class);
                                                startActivity(intent);
                                                finish();
                                            }

                                        };

                                    }.execute();

                                 }

                            }
                        })
                        .setNegativeButton(getString(R.string.invite_cancel), new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {

                                /* User clicked cancel so do some stuff */
                            }
                        }).show();

             }
            else
            {
                Toast.makeText(getApplicationContext(), getString(R.string.invite_choice_check), Toast.LENGTH_SHORT).show();
            }
        }
    });

это дает мне:

07-21 03:36:24.519: E/WindowManager(23240): Activity com.portaura.myaura.invite.MobileConnectActivity has leaked window [email protected] that was originally added here
07-21 03:36:24.519: E/WindowManager(23240): android.view.WindowLeaked: Activity com.portaura.myaura.invite.MobileConnectActivity has leaked window [email protected] that was originally added here
07-21 03:36:24.519: E/WindowManager(23240):     at android.view.ViewRoot.<init>(ViewRoot.java:266)
07-21 03:36:24.519: E/WindowManager(23240):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:174)
07-21 03:36:24.519: E/WindowManager(23240):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:117)
07-21 03:36:24.519: E/WindowManager(23240):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
07-21 03:36:24.519: E/WindowManager(23240):     at android.app.Dialog.show(Dialog.java:241)
07-21 03:36:24.519: E/WindowManager(23240):     at com.portaura.myaura.invite.MobileConnectActivity$3$1$1.onPreExecute(MobileConnectActivity.java:161)
07-21 03:36:24.519: E/WindowManager(23240):     at android.os.AsyncTask.execute(AsyncTask.java:391)
07-21 03:36:24.519: E/WindowManager(23240):     at com.portaura.myaura.invite.MobileConnectActivity$3$1.onClick(MobileConnectActivity.java:201)
07-21 03:36:24.519: E/WindowManager(23240):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:165)
07-21 03:36:24.519: E/WindowManager(23240):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 03:36:24.519: E/WindowManager(23240):     at android.os.Looper.loop(Looper.java:130)
07-21 03:36:24.519: E/WindowManager(23240):     at java.lang.reflect.Method.invokeNative(Native Method)
07-21 03:36:24.519: E/WindowManager(23240):     at java.lang.reflect.Method.invoke(Method.java:507)
4b9b3361

Ответ 1

Исключенные окна исключаются, как правило, из-за диалогов, которые неправильно отклоняются. т.е. если вы планируете отклонить диалог в Onpostexecute asynctask, и действие, которое его создало, закончилось, это вызовет утечку окна. Удостоверьтесь, что вы деактивируете диалог в onPause активности.

Ответ 2

Всякий раз, когда вы инициируете ProgressDialog, это должно быть правильно отклонено после выполнения фоновой задачи или даже отмены фоновой задачи. Таким образом,

вместо mProgressBar.hide(); используйте mProgressBar.dismiss();

вы не получите android.view.WindowLeaked error

надеюсь, что это поможет

Ответ 3

Проверьте, используете ли вы функцию finish() перед функцией mDialog.show(). Если он удаляет финиш() и добавляет его после show().

Ответ 4

whren вы пропустите этот код: mProgressDialog.dismis(); В это время вы можете получить этот тип ошибки.

Ответ 5

Другой сценарий, в котором возникает эта ошибка, - это когда приложение завершает работу, когда отображается диалоговое окно. Посмотрите выше эту ошибку для дополнительных ошибок.

Ответ 6

В обратном вызове onStop() или onDestroy() закрывайте диалог, используя dialogName.dismiss();

Также сделайте нулевую проверку. То есть:

if(dialogName!=null){
dialogName.dismiss()
}

Ответ 7

Простого закрытия диалога было недостаточно, чтобы избавиться от ошибки для меня. Оказывается, мой код удерживал ссылку на диалоговое окно даже после того, как оно было закрыто. Ключом для меня было установить эту ссылку на ноль после закрытия диалога.

Ответ 8

Проблема возникла из-за того, что я использовал android:noHistory="true" для действия, которое вызывало проблему, и это произошло только в Android 6.0 API 23.