クリックするとカスタムサービスクラスを開始するアプリケーション内のボタンがあります。その後、もう一度クリックするとサービスが停止し、進行状況ダイアログが表示されます。Androidイベントバス:イベントがポストを待つことなく発動する
そのボタンのonClick
は、次のようになります。私のサービスのonDestroy
メソッド内
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);
}
}
、私はいくつかのことをチェックすることだし、チェックが合格した場合、私は戻ってメッセージを送信するためにイベントバスを使用します
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
クラスはここにある:
そして、私のフラグメントに私はこれやってる:だから
@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回目のクリックされたされたときに何が起こってしなければならない、進捗ダイアログが表示されます、サービスはいくつかのことをチェックし、次に、破棄メッセージをフラグメントに送り返します。フラグメントがメッセージを受け取り、進行状況ダイアログを閉じます。
問題は、進行状況ダイアログがすぐに(作成されるとすぐに)終了するように見えるため、表示されません。それはダイアログを閉じるのを待っているのとほとんど同じです。 dialog.dismiss()
行をコメントアウトしてダイアログが表示されることを確認できます
私はこれを引き起こすために私のコードに間違いがありますか?
あなたを助ける登録を解除してください却下イベントバスを登録し、よりサービスを開始し、ダイアログの後、その時点でサービスを開始?期待どおりにonDestroyメソッドが呼び出されていることを確認しましたか? –
サービスはセンサーをポーリングするだけで、エグゼキュータサービスを使用して10msごとにデータベースに格納し、ウェイクロックを取得して、画面の状態などにかかわらずセンサーの読み取りが行われるようにします。そして、 'onDestroy'が正しく呼び出されます。単にログを記録することによって – Simon