나는 AsyncTask를 ProgressDialog와 함께 사용한다. 내 코드를 참조하십시오. onPostExecute에 문제가 있습니다. 작업이 처음 실행되는 경우 handleMessage의 progressDialog에 대해 Null Poiter 예외가 발생하지만 dismiss()를 호출하면 직접 작동합니다. onPostExecute에 도달하기 전에 전화를 켜면 progressDialog.dismiss()가 작동하지 않습니다. 핸들러가 항상 작동하지 않는 이유는 무엇입니까?안드로이드 : AsyncTask 핸들
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;
}
}
};