我为什么要使用onPrepareDialog等在Android中显示ProgressDialog?

时间:2011-10-16 10:21:15

标签: java android progressdialog

我目前正在使用以下代码在我的Andorid应用中显示/隐藏ProgressDialog(使用MyActivity调用):

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();
    }
}

现在,由于我在活动中阅读了很多关于onCreateDialog的内容,我只是想知道我的做法是否有任何我想不到的缺点,或者甚至为什么我应该更喜欢{{1}机制。

1 个答案:

答案 0 :(得分:0)

<强> [增订]

这种方法的问题在于,如果Activity将被销毁(例如在旋转时),AsyncTask会将其保留在内存中,从而造成临时内存泄漏。此外,在活动的onDestroy()之后尝试访问ProgressDialog时,它将导致IllegalArgumentException。