【发布时间】:2013-11-19 15:07:56
【问题描述】:
我有一个显示 ProgressDialog 的 AsyncTask。 AsyncTask 在 Activity 启动时启动:
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_layout);
new MyTask().execute();
}
// ... other code
private class MyTask extends AsyncTask<Void, Void, Void>{
private ProgressDialog dialog = new ProgressDialog(MyActivity.this);
@Override
protected void onPreExecute() {
dialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
// get data from a server
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
// call to a method in MyActivity which updates the UI.
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}
}
此代码运行良好,直到我旋转屏幕。这是有道理的,因为用于创建对话框的上下文不再存在(因为旋转时会重新创建活动),并导致窗口泄漏。
我能想到的唯一解决方案不是一个很好的解决方案:创建任务和对话框的静态实例,并在活动被销毁时简单地关闭对话框,如果任务完成,则在 oncreate 方法中重新创建对话框仍在运行。
那么我如何在不丢失功能的情况下解决这样的问题(因此在任务运行时必须始终显示对话框,并且应该允许旋转设备)?
【问题讨论】:
-
@Raghunandan 谢谢,我会调查的!
标签: java android android-asynctask progressdialog