2016-07-13 3 views
1

RxJava를 처음 사용하고 RxJava를 이벤트 버스로 사용하려고합니다. Kaushik Gopal (https://github.com/kaushikgopal/RxJava-Android-Samples/blob/master/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBus.java)의 RxJava 예제를 사용하고 있습니다.Rxjava 이벤트 버스가 다시 시작될 때 다시 구독하지 않습니다.

여기 내 RxBus 코드

public class RxBus { 

private static RxBus _instance; 
private final Subject<Object, Object> _bus; 

public static synchronized RxBus getInstance(){ 
    if(_instance == null){ 
     _instance = new RxBus(); 
    } 
    return _instance; 
} 

private RxBus() { 
    _bus = new SerializedSubject<>(PublishSubject.create()); 
} 

public void send(Object o) { 
    _bus.onNext(o); 
} 

public Observable<Object> toObserverable() { 
    return _bus; 
} 

public boolean hasObservers() { 
    return _bus.hasObservers(); 
} 
} 

내가 다른 스레드에 게시거야하지만 난 UI 스레드에 가입 해요입니다. 여기 내 구독 코드

public abstract class BaseActivity extends AppCompatActivity { 

     protected CompositeSubscription _subscriptions; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      ... 
      _subscriptions = new CompositeSubscription(); 
      ... 
     } 

     @Override 
     protected void onResume() { 

      .... 
      _subscriptions.add(RxBus.getInstance().toObserverable() 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(new Action1<Object>() { 
         @Override 
         public void call(final Object event) { 
          //Do something here 
         } 
        })); 

      .....   
     } 

     @Override 
     protected void onPause() { 

      ...... 
      _subscriptions.unsubscribe(); 
    } 
} 

처음 활동을로드 할 때 이벤트가 수신됩니다. 그러나 활동을 닫고 다시 열면 (onPause 및 onResume 트리거) 이벤트가 중지됩니다. 내가 여기서 아무것도 놓치고 있니? RxJava를 이벤트 버스로 사용하는 올바른 방법입니까? 다시 다른 스레드에 게시하지만 UI 스레드에 가입하고 있습니다. 감사합니다

답변

1

나는 문제를 알아 냈다. _subscriptions.unsubscribe() 대신 _subscriptions.clear()를 호출해야했습니다.

관련 문제