1

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

那个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()行来确认对话框确实显示

我的代码哪里出错了?

4

1 回答 1

0

当您启动服务时首先注册事件总线然后启动服务并在对话框关闭后取消注册您的事件总线将帮助您

于 2016-03-31T05:52:29.193 回答