这个问题与AsyncTask需要杀死 a 的 a 有关ProgressDialog。在任务运行时,活动被销毁并重新创建(例如手机轮换)。在 的帮助下创建了一个新对话框,onSaveInstanceState()但AsyncTask由先前销毁的活动产生的 ,看不到它。
图片,如果你愿意的话……(例如,为了快速样机代码)。
public class Bob extends Activity {
private ProgressDialog m_d;
public void onCreate(Bundle b) {
m_d = new ProgressDialog(this);
// ...
if (b != null) {
if (b.getBoolean("dialog") == true)
m_d.show();
}
// ...
}
public void onSaveInstanceState(Bundle b) {
super.onSaveInstanceState(b);
b.putBoolean("dialog", (m_d.isShowing()));
}
public void onDestroy() {
if (m_d.isShowing()) {
m_d.dismiss();
m_d = null;
}
//...
}
}
AsyncTask onPreExecute()做m_d.show()和onPostExecute()做m_d.hide()。_
问题是当我的活动被重新创建时(例如,在手机轮换时),AsyncTask似乎有旧的m_d. 是的null,因为那被杀了onDestroy()。
它没有 new m_d,在重新创建活动时创建。所以现在我有一个ProgressDialog,而应该杀死它的人onPostExecute()看不到它。
怎么办?我需要旧AsyncTask的以某种方式发出信号让新ProgressDialog的离开。
private OnItemSelectedListener onSpinnerSelection = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// ...
new Switcharoo().execute();
}
}
private class Switcharoo extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
m_d.show();
// ...
}
protected void onPostExecute() {
if (m_d != null) m_d.hide();
// ...
}
protected Void doInBackground(Void... arg0) {
// ...
}
}
如果 Android 在任务运行时没有终止我的活动,那很好。像我预期的ProgressDialog那样弹出并消失。
如果 Android 在任务运行时出于任何原因决定重新启动我的活动,即使我在其中重新创建了它,它m_d也会null在其中- 它有旧的,而不是新的。onPostExecute()onCreate()m_d