RxJava中BehaviorSubject适合的使用场景
生活随笔
收集整理的這篇文章主要介紹了
RxJava中BehaviorSubject适合的使用场景
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上篇大體介紹了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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_b);mSubscription = MyDataEvent.subscrible(new Action1<String>() {@Overridepublic void call(String data) {//receive event and process dataLog.d("dbs", BActivity.class.getSimpleName() + ": " + data);}});}@Overrideprotected void onDestroy() {super.onDestroy();MyDataEvent.unSubscrble(mSubscription);} }這樣無論是數據在進入頁面B前到達還是數據在進入頁面B之后到達,B頁面都會接受到數據,因為此處使用了BehaviorSubject。
效果圖
附件下載
如果對BehaviorSubject不是很了解可以參看RxJava中常見的幾種Subject
總結
以上是生活随笔為你收集整理的RxJava中BehaviorSubject适合的使用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RxJava中常见的几种Subject
- 下一篇: 反编译工具Jadx