ProgressDialog
问题复现
/*
* 一个按钮的Listener中
*/
startTask(singleTask);//发送IO请求
//跳出一个ProgressDialog
if(blockDialog==null){
blockDialog = new ProgressDialog(this);
}
blockDialog.setMessage(string);
blockDialog.setCancelable(false);
blockDialog.show();
/*
* 响应放在onEventMainThread中
*/
public void onEventMainThread(CmdEvent event) {
if(seqnum==event.seqNum){
blockDialog.dismiss();
}
}
发现有极小情况下dialog.show()之后无法被dismiss掉,会卡死。
百思不得其解。
错误分析
如果show()和dismiss()操作均是发送消息给UI线程,在UI线程中操作,那么流程会是如下:
UI线程:
onClick()
- startUITask //收到event,产生2操作
- progressDialog.show()//发送showMessage,即3操作
onEventMainThread(Event event)
- progressDialog.dismiss()//发送dismissMessage