我需要在两个活动MainActivity和ChildActivity之间传递一些数据.单击按钮MainActivity应打开ChildActivity并发送包含数据的事件.我有单身人士:
Subject<Object,Object> subject = new SerializedSubject<>(PublishSubject.create());
在MainActivity中我有以下按钮单击处理程序:
public void onClick(){ startActivity(new Intent(MainActivity.this,ChildActivity.class)); subject.onNext(new SomeEvent(data)); }
和ChildActivity中的事件侦听器订阅:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addEventListeners(); } private void addEventListeners() { subject.ofType(SomeEvent.class) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()).subscribe( event -> { loadData(event.getData()); }); }
当我在启动活动后发送事件并在ChildActivity中调用addEventListeners时onCreate仍未订阅此事件且未调用loadData().
使用RxJava在活动之间传递数据的正确方法是什么(如果可能的话)?
解决方法
原因:
问题是您正在使用PublishSubject.根据PublishSubject的文档,在订阅时会发出源Observable的所有后续项.所以在你的情况下,它只会在订阅时发出事件.
修复你的问题
而不是使用PublishSubject使用BehaviorSubject,当观察者订阅它时,它会发出最近发出的项和源Observable的所有后续项.
浏览following link了解更多详情.