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();
  }
}

ボタンが 2 回目にクリックされると、進行状況ダイアログが表示され、サービスがいくつかのことを確認してから、破棄メッセージをフラグメントに送り返します。フラグメントはメッセージを受け取り、進行状況ダイアログを閉じます

問題は、進行状況ダイアログが(作成されるとすぐに)すぐに閉じられるように見えるため、まったく表示されないことです。ダイアログを閉じる前に、dismiss イベントを待機していないようです。dialog.dismiss()行をコメントアウトすることで、ダイアログが表示されることを確認できます

これを引き起こすコードのどこが間違っているのでしょうか?

4

1 に答える 1

0

その時点でサービスを開始するときは、最初にイベントバスを登録してからサービスを開始し、ダイアログを閉じた後、イベントバスの登録を解除してください。

于 2016-03-31T05:52:29.193 に答える