Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
Java 为什么我应该使用onPrepareDialog等来显示Android中的ProgressDialog?_Java_Android_Progressdialog - Fatal编程技术网

Java 为什么我应该使用onPrepareDialog等来显示Android中的ProgressDialog?

Java 为什么我应该使用onPrepareDialog等来显示Android中的ProgressDialog?,java,android,progressdialog,Java,Android,Progressdialog,我目前正在使用以下代码显示/隐藏我的Android应用程序中名为from withing MyActivity的ProgressDialog: 现在,由于我在Activities中读了很多关于onCreateDialog的内容,我只想知道我的方法是否有我没有想到的缺点,或者甚至为什么我更喜欢onCreateDialog机制。[更新] 这种方法的问题是,如果活动被破坏,例如,在轮换时,异步任务会将其保留在内存中,从而造成临时内存泄漏。另外,在活动的onDestroy之后尝试访问ProgressDi

我目前正在使用以下代码显示/隐藏我的Android应用程序中名为from withing MyActivity的ProgressDialog:

现在,由于我在Activities中读了很多关于onCreateDialog的内容,我只想知道我的方法是否有我没有想到的缺点,或者甚至为什么我更喜欢onCreateDialog机制。

[更新]


这种方法的问题是,如果活动被破坏,例如,在轮换时,异步任务会将其保留在内存中,从而造成临时内存泄漏。另外,在活动的onDestroy之后尝试访问ProgressDialog时,它会导致IllegalArgumentException。

好吧,至少它告诉我不会有那么大的错误。。。无论如何,谢谢你的意见!
private void startTask() {
    new MyTask().execute();
}

private class MyTask extends AsyncTask<A, String, C> {
    private ProgressDialog pd;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        this.pd = ProgressDialog.show(MyActivity.this, "Title", "Message", true, true);
        pd.setOnCancelListener(new OnCancelListener() {
            public void onCancel(DialogInterface dialog) {
                MyTask.this.cancel(true);
            }
        });

    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        this.pd.setMessage(values[0]);
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
        Toast.makeText(MyActivity.this, "cancelled", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPostExecute(RequestResult result) {
        super.onPostExecute(result);
        this.pd.dismiss();
    }
}