【发布时间】:2016-09-03 14:13:27
【问题描述】:
我正在构建一个 Android 应用程序,并且是 Rxjava 的新手,有一个初学者的问题: 如何在活动开始时订阅事件,并在活动停止时关闭订阅?
我很困惑如何实现它。
【问题讨论】:
标签: android events rx-java publish-subscribe
我正在构建一个 Android 应用程序,并且是 Rxjava 的新手,有一个初学者的问题: 如何在活动开始时订阅事件,并在活动停止时关闭订阅?
我很困惑如何实现它。
【问题讨论】:
标签: android events rx-java publish-subscribe
您必须创建PublishSubject 的实例并订阅它。当您想要发送和事件时,您需要调用PublishSubject 实例的onNext()。
注意:您必须为每种类型的订阅持有一个实例。
首先你必须创建 EventSubscription 类来保存特定的PublishSubject 实例:
EventSubscription.java:
public class EventSubscription {
private static EventSubscription instance;
private PublishSubject<String> subject = PublishSubject.create();
/**
* Singleton
*/
public static EventSubscription getInstance() {
if (instance == null) {
instance = new EventSubscription();
}
return instance;
}
/**
* Pass any event down to event listeners.
*/
public void setString(String eventName) {
subject.onNext(eventName);
}
/**
* Subscribe to this Observable. On event
*/
public Observable<String> getEvents() {
return subject;
}
}
在您的活动中,您还需要持有一个订阅实例才能在活动停止时取消订阅。请参阅以下活动类:
public class MyActivity extends Activity {
private Subscription mMySubscription;
@Override
public void onStart(){
// Start the subscription
mMySubscription = EventSubscription.getInstance().getEvents()
.subscribe(new Action1<String>() {
@Override
public void call(String eventName){
// Handle new event
}
});
}
@Override
public void onStop(){
if(mMySubscription != null && ! mMySubscription.isUnsubscribed()){
// if your subscription already unsubscribed
mMySubscription.unsubscribe();
}
}
}
【讨论】: