概述
上篇大体介绍了RxJava中几种常见的Subject特性
下面我们着重阐述BehaviorSubject在Android中适合的使用场景及其实现方式
场景:A页面正在请求数据D时立马跳到B页面,B页面希望能够接受到A页面发起请求返回的数据
解决方案有多种eg:使用Android 驻留广播机制、EventBus、RxJava。
该篇主要介绍RxJava的具体实现方式
它和前面几种方案都类似,都是在B页面注册广播事件、在数据D回来后立马发送广播(即使注册或者订阅的是在发送广播/事件之后)
第一步:编写一个类,该类负责发送事件和订阅事件
public class MyDataEvent {
//能够缓存订阅之前的最新数据(如果有)
private static BehaviorSubject<String> sTotalAssetEvent = BehaviorSubject.create();
private MyDataEvent() {
}
/**
* 发送事件
* @param text
*/
public static void publish(String text) {
sTotalAssetEvent.onNext(text);
}
/**
* 订阅事件
* @param action
* @return
*/
public static Subscription subscrible(Action1<String> action) {
return sTotalAssetEvent.subscribe(action);
}
/**
* 反订阅 防止内存泄露
* @param subscription
*/
public static void unSubscrble(Subscription subscription) {
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
subscription = null;
}
}
}
第二步:在A页面请求数据回来后发送数据事件通知
MyDataEvent.publish("this is a data"+(data++));
第三步:在B页面中订阅事件并对数据做业务逻辑处理
public class BActivity extends Activity {
private Subscription mSubscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
mSubscription = MyDataEvent.subscrible(new Action1<String>() {
@Override
public void call(String data) {
//receive event and process data
Log.d("dbs", BActivity.class.getSimpleName() + ": " + data);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
MyDataEvent.unSubscrble(mSubscription);
}
}
这样无论是数据在进入页面B前到达还是数据在进入页面B之后到达,B页面都会接受到数据,因为此处使用了BehaviorSubject。
效果图
附件下载
如果对BehaviorSubject不是很了解可以参看RxJava中常见的几种Subject
最后
以上就是光亮火为你收集整理的RxJava中BehaviorSubject适合的使用场景的全部内容,希望文章能够帮你解决RxJava中BehaviorSubject适合的使用场景所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复