android.view.WindowLeaked 问题彻底解决【dialog导致窗口泄露】

    方法一:

关联activity的生命周期

在activity中重写

@Override
protected Dialog onCreateDialog(int id) {
    Dialog dialog = new Dialog(this);
    return dialog;
  //  return super.onCreateDialog(id);
}

现实dialog使用

 showDialog(0);
方法


这样先finish了activity;dialog也会先被dismiss


方法二:

使用

DialogFragment进行dialog的管理
 
  
public class AlertDialogFragment2 extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity()).setTitle("Title").setMessage("are you ok?")
                .setPositiveButton("Sure", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dismiss();
                    }
                }).setNegativeButton("cancel", null)
                .create();
    }
}
然后进行现实
 
  
 FragmentTransaction mFragTransaction = getFragmentManager().beginTransaction();
// Fragment fragment =  getFragmentManager().findFragmentByTag("dialogFragment");
 AlertDialogFragment2 dialogFragment = new AlertDialogFragment2();
 dialogFragment.show(mFragTransaction, "dialogFragment");//显示一个Fragment并且给该Fragment添加一个Tag,可通过findFragmentByTag找到
这样finsh之前没有关闭dialog也不会导致窗口泄露;应为fragment会由activity管理;


你可能感兴趣的:(安卓异常)