我目前正在使用以下代码在我的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}机制。
答案 0 :(得分:0)
<强> [增订] 强>
这种方法的问题在于,如果Activity将被销毁(例如在旋转时),AsyncTask会将其保留在内存中,从而造成临时内存泄漏。此外,在活动的onDestroy()之后尝试访问ProgressDialog时,它将导致IllegalArgumentException。