クリックするとカスタム サービス クラスを開始するボタンがアプリにあります。次に、もう一度クリックすると、サービスが停止し、進行状況ダイアログが表示されます。
その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()
行をコメントアウトすることで、ダイアログが表示されることを確認できます
これを引き起こすコードのどこが間違っているのでしょうか?