2016-09-21 3 views
0

현재 rxjava를 사용 중이며 창 운영자와 연결되어 있습니다. 내 안드로이드 장치에서 다음과 같은 간단한 코드를 테스트하고 혼란스러운 결과를 얻고 있습니다.Rxjava window() 혼란스러운 결과

코드 :

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] 

같은 사람이 설명해 주실 수 :

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

때때로, 나는 무엇을하는 것이 나에게 적합 결과처럼 보인다 얻을 이 코드에서 결과가 다른 이유는 무엇입니까?

답변

0

코드가 즉시 실행되지 않습니다. 로그에서 볼 수 있듯이 onNext 이벤트가 발생하는 데는 작은 차이가 있으므로 정확히 100 밀리 초의 다중도가 아닙니다. 창 연산자를 추가하면 간격이 더 커집니다. 이 코드에서 onNext 이벤트 창 연산자없이 잘못된 창을 창 연산자

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 

로그

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 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 
관련 문제