Android事件总线:无需等待帖子即可触发事件

时间:2016-03-31 05:36:32

标签: android android-service android-dialog greenrobot-eventbus greenrobot-eventbus-3.0

我的应用中有一个按钮,用于在单击时启动自定义服务类。然后,再次单击时,我停止服务并显示进度对话框。

这些按钮的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()

来确认对话框是否显示

我的代码在哪里导致错误?

1 个答案:

答案 0 :(得分:0)

当你在那时开始服务时首先注册事件总线而不是启动服务并在对话解除后请取消注册你的eventbus将帮助你