我將AsyncTask與ProgressDialog結合使用。 看我的代碼,我在onPostExecute有問題。 如果任務第一次運行,它會爲handleMessage中的progressDialog獲取一個空指針異常,但直接調用dismiss()將會起作用。 在到達onPostExecute之前打開手機時,progressDialog.dismiss()不起作用。爲什麼處理程序不總是工作?Android:AsyncTask的Handler
public class UpdateTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog progressDialog;
private Handler handler;
public UpdateTask(Act activity) {
progressDialog = ProgressDialog.show(Activity.this, "Wait",
"Wait");
progressDialog.dismiss();
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
//run on UI Thread
switch(msg.what){
case MSG:
progressDialog.show();
break;
case DETACH:
progressDialog.dismiss();
break;
}
}
};
}
void detach() {
activity=null;
//problematic
//progressDialog.dismiss();
//handler.sendEmptyMessage(DETACH);
}
@Override
protected Void doInBackground(Void... params) {
handler.sendEmptyMessage(MSG);;
return null;
}
protected void onPostExecute(Void result) {
if (activity==null) {
Log.w("RotationAsync", "onPostExecute() skipped -- no activity");
}
else {
//problematic
// progressDialog.dismiss();
handler.sendEmptyMessage(MSG);
progressDialog = null;
}
}
};