2016-09-21 10 views
0

私は現時点でrxjavaを取り入れていて、ウィンドウ演算子で動かなくなっています。私はアンドロイドデバイスの次の簡単なコードをテストして、混乱している結果を得ています。Rxjavaウィンドウ()混乱している結果

コード:

Observable.interval(100, TimeUnit.MILLISECONDS) 
    .take(10) 
    .window(250, 100, TimeUnit.MILLISECONDS) 
    .flatMap(o -> o.toList()) 
    .subscribe(o -> Log.d(TAG, "object: "+o)); 

は時々、私は私のために右の結果のように見えているものを得る:

object: [0, 1] 
object: [0, 1, 2] 
object: [1, 2, 3] 
object: [2, 3, 4] 
object: [3, 4, 5] 
object: [4, 5, 6] 
object: [5, 6, 7] 
object: [6, 7, 8] 
object: [7, 8, 9] 
object: [8, 9] 
object: [9] 

しかし、時には、私は

object: [0, 1] 
object: [0, 1, 2] 
object: [1, 2, 3] 
object: [2, 3, 4] 
object: [3, 4, 5] 
object: [4, 5, 6] 
object: [6, 7] 
object: [6, 7, 8] 
object: [7, 8, 9] 
object: [8, 9] 
object: [9] 

のようなものを取得し、誰もが説明してもらえなぜこのコードの結果が異なるのですか?

答えて

0

コードはすぐに実行されません。ログから見ることができるように、onNextイベントの発生にはわずかな違いがあります。したがって、100ミリ秒の正確な多重度に等しくはありません。ウィンドウ演算子を追加すると、ギャップがさらに大きくなります。このコードではonNextイベントは、ウィンドウ演算子なし

Observable.interval(100, TimeUnit.MILLISECONDS) 
     .doOnNext(new Action1<Long>() { 
      @Override 
      public void call(Long aLong) { 
       Log.d(TAG, "ON NEXT TIME " + System.currentTimeMillis() % 10000); 
      } 
     }) 
     .take(10) 
     .window(250, 100, TimeUnit.MILLISECONDS) 
     .subscribe(new Action1<Object>() { 
      @Override 
      public void call(Object aLong) { 
       Log.d(TAG, "SUBSCRIBE TIME: " + System.currentTimeMillis() % 10000); 
      } 
     }); 

ログウィンドウ演算子と

SOME_TAG: ON NEXT TIME 8445 
SOME_TAG: SUBSCRIBE TIME: 8445 
SOME_TAG: ON NEXT TIME 8545 
SOME_TAG: SUBSCRIBE TIME: 8545 
SOME_TAG: ON NEXT TIME 8646 
SOME_TAG: SUBSCRIBE TIME: 8646 
SOME_TAG: ON NEXT TIME 8745 
SOME_TAG: SUBSCRIBE TIME: 8745 
SOME_TAG: ON NEXT TIME 8846 
SOME_TAG: SUBSCRIBE TIME: 8846 
SOME_TAG: ON NEXT TIME 8945 
SOME_TAG: SUBSCRIBE TIME: 8945 
SOME_TAG: ON NEXT TIME 9045 
SOME_TAG: SUBSCRIBE TIME: 9045 
SOME_TAG: ON NEXT TIME 9145 
SOME_TAG: SUBSCRIBE TIME: 9146 
SOME_TAG: ON NEXT TIME 9245 
SOME_TAG: SUBSCRIBE TIME: 9245 
SOME_TAG: ON NEXT TIME 9345 
SOME_TAG: SUBSCRIBE TIME: 9345 

ログ

SOME_TAG: ON NEXT TIME 7622 
SOME_TAG: SUBSCRIBE TIME: 7718 
SOME_TAG: ON NEXT TIME 7722 
SOME_TAG: SUBSCRIBE TIME: 7818 
SOME_TAG: ON NEXT TIME 7822 
SOME_TAG: SUBSCRIBE TIME: 7918 
SOME_TAG: ON NEXT TIME 7922 // THIS 
SOME_TAG: SUBSCRIBE TIME: 8018 
SOME_TAG: ON NEXT TIME 8023 // COMPARE WITH THIS 
SOME_TAG: SUBSCRIBE TIME: 8118 
SOME_TAG: ON NEXT TIME 8122 
SOME_TAG: SUBSCRIBE TIME: 8218 
SOME_TAG: ON NEXT TIME 8223 
SOME_TAG: SUBSCRIBE TIME: 8319 
SOME_TAG: ON NEXT TIME 8323 
SOME_TAG: SUBSCRIBE TIME: 8419 
SOME_TAG: ON NEXT TIME 8422 
SOME_TAG: SUBSCRIBE TIME: 8518 
SOME_TAG: ON NEXT TIME 8522 
間違ったウィンドウに当たる場合は、不要な動作を引き起こす可能性がある境界場合があります
関連する問題