我有一個像這樣加載AlertDialog的活動。使用上下文和AlertDialog/AsyncTask處理方向更改
progressDialog = new ProgressDialog(MyActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Doing Something");
progressDialog.setCancelable(false);
progressDialog.show();
我也有一個擴展的AsyncTask
private class MyBackgroundTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
...do stuff
}
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
如果另一個類的屏幕變化我得到試圖連接到不存在的觀點錯誤的方向。這是因爲該活動已被銷燬,環境已消失。
因此,我將此添加到onDestroy()並修復它。
@Override
public void onDestroy() {
if(progressDialog!=null)
if(progressDialog.isShowing())
progressDialog.cancel();
if(background!=null)
background.cancel(true);
}
但這意味着我一直要保持到對話框和的AsyncTask
參考,所以我不能例如做到這一點:
new MyAsyncTask().execute();
萬一方向改變,同樣我不能這樣做:
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("some title")
.setMessage("some message")
.setPositiveButton(R.string.ok, null)
.show();
這看起來不正確,我必須有一個更好的華Ÿ,我知道你可以使用getApplicationContext(),但在某些情況下這是不可行的。
我該如何妥善管理?