我的应用中有一个按钮,用于在单击时启动自定义服务类。然后,再次单击时,我停止服务并显示进度对话框。
这些按钮的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
方法中,我正在检查一些事情,如果检查通过,我使用事件总线将消息发送回片段,以便它可以关闭进度对话框:< / p>
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()
行
我的代码在哪里导致错误?
答案 0 :(得分:0)
当你在那时开始服务时首先注册事件总线而不是启动服务并在对话解除后请取消注册你的eventbus将帮助你