0

クリックするとカスタムサービスクラスを開始するアプリケーション内のボタンがあります。その後、もう一度クリックするとサービスが停止し、進行状況ダイアログが表示されます。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()行をコメントアウトしてダイアログが表示されることを確認できます

私はこれを引き起こすために私のコードに間違いがありますか?

+0

あなたを助ける登録を解除してください却下イベントバスを登録し、よりサービスを開始し、ダイアログの後、その時点でサービスを開始?期待どおりにonDestroyメソッドが呼び出されていることを確認しましたか? –

+0

サービスはセンサーをポーリングするだけで、エグゼキュータサービスを使用して10msごとにデータベースに格納し、ウェイクロックを取得して、画面の状態などにかかわらずセンサーの読み取りが行われるようにします。そして、 'onDestroy'が正しく呼び出されます。単にログを記録することによって – Simon

答えて

0

あなたが最初にあなたのeventbusはあなたのサービスの残りの部分は何をしているのです

+0

サービスを開始する直前に私の 'onClick'にeventbusを登録し、サービスを停止した直後に登録を解除すると'イベントクラスcom.example.appに登録されているユーザはいません.DismissDialogEvent' – Simon

+0

@Simonは登録解除後に登録解除する –

+0

私はそれをしても同じ問題を抱えています - ダイアログはすぐには表示されず、解除されません。 – Simon

関連する問題