国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

最適合使用RxJava處理的四種場景

新聞 移動(dòng)開發(fā)
RxJava是非常熱門的函數(shù)響應(yīng)式編程庫,在Android開發(fā)中已經(jīng)非常流行了,剛開始上手會(huì)有點(diǎn)難,但只要理解了它,就再也回不去了。

RxJava是非常熱門的函數(shù)響應(yīng)式編程庫,在Android開發(fā)中已經(jīng)非常流行了,剛開始上手會(huì)有點(diǎn)難,但只要理解了它,就再也回不去了;不使用RxJava寫異步請(qǐng)求的話,就感覺各種不爽。

[[201947]]

本文不準(zhǔn)備講RxJava的基礎(chǔ)知識(shí),如果你對(duì)RxJava不熟悉,這里有篇不錯(cuò)的教程可以參考 《給 Android 開發(fā)者的 RxJava 詳解》 。

下面我們開始介紹RxJava最適合使用的四種場景,代碼示例基于RxJava1

場景一: 單請(qǐng)求異步處理

由于在Android UI線程中不能做一些耗時(shí)操作,比如網(wǎng)絡(luò)請(qǐng)求,大文件保存等,所以在開發(fā)中經(jīng)常會(huì)碰到異步處理的情況,我們最典型的使用場景是RxJava+Retrofit處理網(wǎng)絡(luò)請(qǐng)求

MyService myService = retrofit.create(MyService.class);
myService.getSomething()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::updateUI, this::showError);

為了使代碼看起來簡潔點(diǎn),這邊還使用了lambda表達(dá)式, updateUI 和 showError 需要在當(dāng)前類中實(shí)現(xiàn),比如:

public void updateUI(Data data){
      //TODO something
}

public void showError(throwable t){
      //show error msg
}

場景二: 多異步請(qǐng)求連續(xù)調(diào)用

這種場景其實(shí)也很常見,我們做用戶頭像編輯的使用,一般就會(huì)有三個(gè)請(qǐng)求需要連續(xù)調(diào)用:

  1. 請(qǐng)求頭像上傳的地址
  2. 上傳頭像
  3. 更新用戶信息

在平時(shí)的代碼里,我們需要一步步callback嵌套下來,代碼冗長太難看,而且不好維護(hù),使用RxJava鏈?zhǔn)秸{(diào)用處理代碼邏輯就會(huì)非常清晰

Observable.just(1)
  .map(this::task1)
  .map(this::task2)
  .map(this::task3)
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(this::updateUI, this::showError);

這里的just發(fā)送的固定值1,沒有實(shí)際意義,只是我覺得這樣更信息

你也可以用Observable.create創(chuàng)建observable。

場景三: 多異步請(qǐng)求合并處理

有時(shí)候在項(xiàng)目中,我們會(huì)碰到組合多個(gè)請(qǐng)求的結(jié)果后,再更新UI的情況,比如我們項(xiàng)目中就有一個(gè)從多個(gè)請(qǐng)求地址獲取通知數(shù)據(jù),然后在APP上再按時(shí)間順序組合后展示的需求,這時(shí)候我們就可以用RxJava的zip函數(shù)來處理了

MyService myService = retrofit.create(MyService.class);
Observable o1 = myService.getNotification1();
Observable o2 = myService.getNotification2();
Observable.zip(o1,o2, this::combiNotification)
             .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::updateUI, this::showError);


public List<Notification> combiNotification(List<Notification> n1, List<Notification> n2){
      //TODO 合并通知列表
}

zip函數(shù)會(huì)等待兩個(gè)請(qǐng)求都完成后,調(diào)用我們的合并方法combiNotification,等合并處理后再回調(diào)subscribe中的方法。

場景四: 定時(shí)輪詢

RxJava還特別適合對(duì)定時(shí)輪詢?nèi)蝿?wù)的處理, 一種典型的例子就是APP提交了一個(gè)任務(wù)給后臺(tái)異步處理,假設(shè)后臺(tái)處理需要1-2分鐘左右,我們需要定時(shí)到后臺(tái)查詢進(jìn)度,并更新到UI上, 傳統(tǒng)的做法是用Handler的postDelay方法,用RxJava實(shí)現(xiàn)的話就會(huì)非常簡潔

Subscription subscription =  Observable.interval(2, TimeUnit.SECONDS)
                .map(this::getProgress)
                .takeUntil(progress -> progress !=  100)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Long>() {
                    @Override
                    public void onCompleted() {
                        //TODO finished
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onNext(int progress) {
                         //TODO update progress
                    }
                });

我們以定時(shí)2秒查詢一次,直到進(jìn)度progress=100為止,自動(dòng)終止輪詢。

以上各種RxJava方法都是異步耗時(shí)調(diào)用,考慮到Activity的退出時(shí)請(qǐng)求還沒有完成,我們需要在Activity的OnDestroy方法中取消RxJava調(diào)用

subscription.unsubscribe();
責(zé)任編輯:張燕妮 來源: 推酷
相關(guān)推薦

2020-11-24 05:59:41

容器

2020-03-17 15:55:12

Redis數(shù)據(jù)庫命令

2018-09-25 07:08:52

IAM身份及訪問管理網(wǎng)絡(luò)安全

2009-01-19 16:54:50

數(shù)據(jù)挖掘CRM孤立點(diǎn)

2017-04-07 11:30:04

人工智能開發(fā)編程語言

2009-07-16 10:53:11

iBATIS 使用

2018-09-07 06:30:50

物聯(lián)網(wǎng)平臺(tái)物聯(lián)網(wǎng)IOT

2021-02-14 10:09:04

數(shù)據(jù)目錄數(shù)據(jù)元數(shù)據(jù)

2016-01-26 09:58:28

云存儲(chǔ)云服務(wù)云安全

2018-01-05 08:53:32

LinuxUbuntu發(fā)行版

2020-11-10 10:08:41

Kubernetes容器開發(fā)

2019-03-10 22:21:47

框架AI開發(fā)

2020-12-31 11:42:23

Linux編程字體代碼

2012-03-20 09:32:24

Linux服務(wù)器

2017-03-09 13:30:13

Linux游戲AMD

2020-06-24 07:49:13

Kubernetes場景網(wǎng)絡(luò)

2012-12-13 21:50:43

2016-07-14 16:27:54

linux

2014-08-19 15:05:08

Linux

2024-05-15 08:49:23

.NET定時(shí)器UI線程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

中文字幕一区二区精品| 777xxx欧美| 狠狠色综合网站久久久久久久| 欧美xx视频| 日韩欧美在线综合网| 在线人成日本视频| 精品福利视频导航| 日本a在线天堂| 成人美女视频在线看| 在线观看午夜看亚太视频| 国产精品丝袜久久久久久不卡| 国产视频一区在线播放| 日韩av黄色| 区一区二区三区中文字幕| 亚洲黄色一区| 国产精品亚洲美女av网站| 经典一区二区| 成人片在线免费看| 国产精品99在线观看| 九九精品在线观看| 99免费精品| 哥也色在线视频| 日韩欧美中文字幕精品| 成人涩涩视频| 亚洲高清视频一区二区| 色8久久久久| 欧美日韩一区二区视频在线| 成人免费视频app| 日韩伦理一区二区| 色视频在线免费观看| 亚州欧美一区三区三区在线| 久久精品国产精品| 久久精品亚洲一区二区| 欧美亚洲视频一区| 成人欧美一区二区三区小说| 欧美色视频免费| 97超级碰碰碰| 欧美一区二区三区激情视频| 欧美日韩精品是欧美日韩精品| 日本不卡在线| 日本五级黄色片| 欧美精品一区在线观看| 超碰成人久久| 羞羞小视频在线观看| 成人午夜视频在线观看免费| 欧美国产综合一区二区| 欧美国产视频在线观看| 国产亚洲短视频| 在线观看中文字幕的网站| 国产精品你懂得| 国产不卡视频在线观看| 手机在线成人免费视频| 亚洲欧美成人一区二区三区| 一个人免费视频www在线观看| 日韩美女av在线| 欧美与亚洲与日本直播| 亚洲一区二区三区乱码aⅴ蜜桃女| 福利一区在线观看| 国产福利小视频在线观看| 992tv在线成人免费观看| 国产丝袜视频在线播放| 成人手机视频在线| 成人丝袜18视频在线观看| 杨幂毛片午夜性生毛片| 国产欧美日韩中文久久| 中文精品一区二区三区| 亚洲大片在线观看| 国产777精品精品热热热一区二区| 久久99热只有频精品91密拍| 色婷婷精品大视频在线蜜桃视频| 精品免费av| 中文精品视频一区二区在线观看| 日韩av在线电影网| 国产精品久久久久婷婷二区次| 男女性激情视频在线观看| 色综合天天综合狠狠| 久久人体大尺度| 91精品国产一区| 激情成人午夜视频| 在线国产视频| 日韩片之四级片| 日韩一级片播放| 狠狠躁夜夜躁久久躁别揉| 成人免费高清在线播放| 艳妇臀荡乳欲伦亚洲一区| 欧美韩日亚洲| 国产精品欧美激情在线播放| 色哟哟一区二区三区| 亚洲乱码精品| 韩国精品免费视频| 青青青在线观看视频| 国产精品美女视频网站| 欧美激情视频一区二区三区在线播放 | 天堂视频福利| 精品福利一区二区| 最色在线观看| 久久精品视频免费| 2020中文字字幕在线不卡| 国产精品欧美极品| 国产日韩成人内射视频| 国产美女娇喘av呻吟久久| 97av视频在线观看| 久久成人免费电影| 亚洲一区二区久久久久久久 | 懂色av一区| 亚洲无限av看| 欧美性受ⅹ╳╳╳黑人a性爽| 五月综合激情婷婷六月色窝| aiai在线| 欧美成人在线网站| 欧美在线观看视频一区| 日本精品视频在线| 国产一区二区三区日韩精品| 国产精品视频一区二区三区四| 性欧美videos另类喷潮| 农村妇女精品一二区| 欧美不卡激情三级在线观看| 欧美日本不卡高清| 午夜影院网站| 国产日韩欧美电影在线观看| 久久一夜天堂av一区二区三区| 久久久久久穴| 男人天堂成人网| 精品国产网站在线观看| 欧美韩日高清| 欧美xxx黑人xxx水蜜桃| 欧美黄色小说| 国产精品aaa| 亚洲444eee在线观看| 网红女主播少妇精品视频| 亚洲精品高清国产一线久久| 亚洲视频一区二区在线观看| 国产区在线视频| 91成人精品网站| 91精品久久久久久久99蜜桃| 91麻豆精品| 北条麻妃在线视频观看| 正在播放国产一区| 国产精品国产三级国产aⅴ入口| 亚洲va久久久噜噜噜久久| 欧美久久天堂| 日韩av在线综合| 日韩中文字幕在线视频| 国产一区二区福利| 午夜视频在线观看精品中文| 国产99re| 中文字幕日韩欧美精品在线观看| 亚洲国产成人精品女人| 亚洲精品在线视频观看| 亚洲视频一二三| 美日韩黄色大片| 成人一区二区免费视频| 欧美日产在线观看| 欧美疯狂party性派对| 日本中文字幕在线视频观看 | 蜜臀a∨国产成人精品| 在线看国产视频| 精品在线不卡| 99精品欧美一区二区三区小说 | 毛片在线看网站| 视色,视色影院,视色影库,视色网| 亚洲精品人成| 国产精品久久久久9999| 国产清纯白嫩初高生在线观看91| 日韩一区二区三区免费视频| 成人在线免费高清视频| 国产亚洲欧美日韩精品| 国产一区二区你懂的| 国产精品影视| 亚洲欧美国产一区二区| 国产66精品久久久久999小说 | 国产成人一区二区三区免费看| 91国产免费观看| 激情都市一区二区| 夜夜嗨av一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 国产欧美日韩中文久久| 蜜桃av综合| 日韩视频在线一区二区三区 | julia京香一区二区三区| 成人做爰视频www网站小优视频| 亚洲xxxxx| caoporen国产精品| 99re国产| 114国产精品久久免费观看| 91黄色精品| 亚洲最大的成人网| 欧美在线激情视频| 欧美成人久久久| 国产性色av一区二区| 制服丝袜亚洲色图| 精品国偷自产国产一区| 亚洲制服丝袜av| 亚洲二区在线视频| 亚洲黄色在线视频| 在线观看精品一区| 永久免费看mv网站入口亚洲| 日韩电影中文字幕| 精品久久久久久久中文字幕 | 一插菊花综合|