2017-02-08 7 views
2

シンプルな機能テストをしましたが、私は奇妙な問題に直面しました。RxJavaとAndroidサービス

機能テストは次のとおりです。アクティビティでサービスを開始し、最後にアクティビティでメッセージを受信したときに、サービスでRxJavaとboradcastを使用してメッセージをアクティビティに送信します。

メッセージ送信
Intent i = new Intent(this, StartIntentService.class); 
startService(i); 

class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (ACTIVITY_SERVICE_INTERACTIVE.equals(intent.getAction())) { 
      int res = intent.getIntExtra("num", -1); 
      mResTv.append(res + "" + "\t\t\t\t"); 
     } 
    } 
} 

期待される結果は次のとおり:

@Override 
protected void onHandleIntent(Intent intent) { 

    Observable.interval(0, 500, TimeUnit.MILLISECONDS) 
      .filter(integer -> { 
       return (integer < 400) && (integer % 3 == 0); 
      }) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(integer -> { 
       mIntent.putExtra("num", integer); 
       sendBroadcast(mIntent); 
      }); 
} 

メッセージ受信すべての数は、3で割り切れることができるが、しかし、サービスを開始

実際の結果は:すべての数字は-1です。

メソッドの間隔をrangeに置き換えるか、メソッド:.observeOn(AndroidSchedulers.mainThread())を追加すると、すべてうまく行きます。

なぜですか? onReceiveにあなたが(代わりgetLongExtraの)getIntExtraと値を抽出しながら

答えて

2

Observable.intervalは、Long値を発します。したがって、getIntExtraは、デフォルト(-1)として指定した値を返します。

Observable.rangeIntegerの値を放出するので、すべてが期待どおりになります。

+1

**ありがとうございます**。 – Sawyer

関連する問題