绝大部分的文章都在和你讲如何使用Rxjava
中的各种操作符或者是与Rxjava
与 MVP 以及retrofit
的使用。但是却很有文章介绍如何使用它(除去Rxbus
),看到的都是如何吐槽它很危险的。请问应该如何合理的使用。
自己前几天有好好的看了一下subject。热信号难以预估数据的发射,但是可以实现多播以及处理backpressure
(这部分我没有理解)。https://github.com/mohit222cool/Rx-Subjects
1
pwcong 2016-11-03 19:38:00 +08:00
我也只是处于简单使用阶段,比如在下载啊读取啊需要异步防阻塞的时候用,例如我的一个小项目的一段:
``` Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onStart(); subscriber.onNext(ResourceUtils.getString(SplashActivity.this,R.string.loading_data)); DBManager.getInstance().init(); SoundPoolManager.getInstance().init(); GifManager.getInstance().init(); subscriber.onNext(ResourceUtils.getString(SplashActivity.this,R.string.loading_data_success)); subscriber.onCompleted(); } }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { startActivity(new Intent(SplashActivity.this,MainActivity.class)); finish(); } @Override public void onError(Throwable e) { mTextView.setText(ResourceUtils.getString(SplashActivity.this,R.string.loading_data_error)); } @Override public void onNext(String s) { mTextView.setText(s); } }); ``` |
2
KNOX 2016-11-03 19:53:51 +08:00
怎么危险了?想用好 RxJava 当然是看官方 wiki 。
|
3
coa 2016-11-04 01:20:18 +08:00 1
Android 的不清楚,但猜想 FRP 概念上各语言应该通用。
iOS 下使用 ReactiveCocoa 也有一个 RACSubject , RACSubject 被警告比较危险是因为它既可以被订阅,也可以充当订阅者,自由度比较大,不好把控。 RACSubject 会维护一个 Subscriber 列表,每当有 Subscriber 对其订阅时,就会把它添加到列表中(可以被订阅)。同时一旦有人向其 sendNext ,之前添加到列表中的所有订阅者都会取得该值(实现了 RACSubscriber 协议,可以充当订阅者)。 打个比方,现在有个 tableView ,初始化时进行订阅,绑定好需要的操作,然后在点击 Cell 时把值 send 过去,绑定好的操作就能收到该值开始运作。配合 MVVM 使用的话看起来结构会十分清晰,耦合度相当低。 |
4
crashX 2016-11-04 10:38:56 +08:00
subject 是热信号,一般是使用者定义的。不到万不得已不建议用。
|