我的应用程序中有一个按钮,单击该按钮会启动自定义服务类。然后,当再次单击时,我停止服务并显示一个进度对话框。
那个onClick
按钮看起来像这样:
public void onClick(View v) {
if (!recordingStarted){
try{
recordingStarted = true;
mainActivity.startService(new Intent(mainActivity, SensorService.class));
} catch (SQLException e){
mainActivity.logger.e(getActivity(),TAG, "SQL error insertSubject()", e);
}
} else {
dialog = new ProgressDialog(mainActivity);
dialog.setMessage("Stopping...");
dialog.setTitle("Saving data");
dialog.setProgressNumberFormat(null);
dialog.setCancelable(false);
dialog.setMax(100);
dialog.show();
mainActivity.stopService(new Intent(mainActivity, SensorService.class));
startButton.setEnabled(false);
}
}
在onDestroy
我的服务方法中,我正在检查一些事情,如果检查通过,我使用事件总线将消息发送回片段,以便它可以关闭进度对话框:
public void onDestroy() {
if (some condition is true){
//Send message to dismiss progress dialog
EventBus.getDefault().post(new DismissDialogEvent("dismiss"));
//Close databases and stop other things
unregisterListener();
dbHelper.close();
}
}
我的DismissDialogEvent
课在这里:
public class DismissDialogEvent {
public final String message;
public DismissDialogEvent(String message) {
this.message = message;
}
}
在我的片段中,我正在这样做:
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
public void onPause() {
EventBus.getDefault().unregister(this);
super.onPause();
}
@Subscribe
public void onEvent(DismissDialogEvent event){
if (event.message.equals("dismiss")){
dialog.dismiss();
}
}
所以应该发生的是,当第二次单击按钮时,将显示一个进度对话框,服务将检查一些事情,然后将关闭消息发送回片段。片段将收到消息,然后关闭进度对话框
问题是进度对话框似乎立即被关闭(一旦创建),所以它根本不显示。这几乎就像它在继续关闭对话框之前没有等待关闭事件。我可以通过注释掉该dialog.dismiss()
行来确认对话框确实显示
我的代码哪里出错了?