Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的应用经常抛出android.view.WindowException异常--_Android - Fatal编程技术网

我的应用经常抛出android.view.WindowException异常--

我的应用经常抛出android.view.WindowException异常--,android,Android,我的应用经常引发如下异常: E/WindowManager(6282):android.view.WindowManager:活动 com.myActivity已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@4479b710那个 原来是加在这里的 当主活动开始并启动任务时,应用程序将显示一个进度对话框。任务完成后,它将关闭“进度”对话框 我的代码如下。有人能帮我吗 public class MyActivity exten

我的应用经常引发如下异常:

E/WindowManager(6282):android.view.WindowManager:活动 com.myActivity已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@4479b710那个 原来是加在这里的

当主活动开始并启动任务时,应用程序将显示一个进度对话框。任务完成后,它将关闭“进度”对话框

我的代码如下。有人能帮我吗

public class MyActivity extends Activity {

private static int ID_DIALOG_PROGRESS = 2001;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        
    setContentView(R.layout.my_activity);
    showDialog(ID_DIALOG_PROGRESS);
    new MyTask().execute(null, null, null);
}

@Override
protected Dialog onCreateDialog(int id) {
    if (id == ID_DIALOG_PROGRESS) {
        ProgressDialog loadingDialog = new ProgressDialog(this);
        loadingDialog.setTitle("");
        loadingDialog.setMessage("");
        loadingDialog.setIndeterminate(true);
        loadingDialog.setCancelable(false);
        return loadingDialog;
    }

    return super.onCreateDialog(id);
}

private class MyTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... arg0) {

            /* Do something expensive here...*/

            /* Start other activity*/
            Intent intent = new Intent(MyActivity.this, OtherActivity.class);
            startActivityForResult(intent, 1000);
        }

        return null;
    }

    protected void onPostExecute(Void arg0) {
        dismissDialog(ID_DIALOG_PROGRESS);
    }
}
}
公共类MyActivity扩展活动{
私有静态int ID_DIALOG_PROGRESS=2001;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_活动);
showDialog(ID\u DIALOG\u进度);
new MyTask().execute(null,null,null);
}
@凌驾
受保护的对话框onCreateDialog(int id){
如果(id==id\u对话框\u进度){
ProgressDialog loadingDialog=新建ProgressDialog(此);
loadingDialog.setTitle(“”);
loadingDialog.setMessage(“”);
loadingDialog.SetUndeterminate(true);
loadingDialog.setCancelable(假);
返回加载对话框;
}
返回super.onCreateDialog(id);
}
私有类MyTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…arg0){
/*在这里做一些昂贵的事情*/
/*开始其他活动*/
意向意向=新意向(MyActivity.this、OtherActivity.class);
startActivityForResult(意向,1000);
}
返回null;
}
受保护的void onPostExecute(void arg0){
dismissDialog(ID\u DIALOG\u进度);
}
}
}
大多数情况下,异常是从showDialog()调用引发的。另一次,dismissDialog()调用引发了异常


提前谢谢你

在关闭
onPostExecute()
中的对话框之前,您正在
doInBackground()中启动一个新活动,这可能是导致对话框泄漏的原因。我会搬家的

Intent intent = new Intent(MyActivity.this, OtherActivity.class);
startActivityForResult(intent, 1000);

dismissDialog()
之后调用
onPostExecute()
,看看会发生什么。

还有一个很好的做法,那就是尝试一下

dismissDialog(ID_DIALOG_PROGRESS);
否则,在某些情况下,如屏幕旋转后,对话框不再可用时,您可能会收到随机应用程序崩溃