免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      Android架構(gòu)師RX響應(yīng)式編程-Rxjava實戰(zhàn)項目教學(xué)

      Android架構(gòu)師RX響應(yīng)式編程-Rxjava實戰(zhàn)項目教學(xué)

      RX定義

      • Rx是一個函數(shù)庫,讓開發(fā)者可以利用可觀察序列和LINQ風(fēng)格查詢操作符來編寫異步和基于事件程序
      • Rx是微軟.NET的一個響應(yīng)式擴展。Rx借助可觀測的序列提供一種簡單的方式來創(chuàng)建異步的,基于事件驅(qū)動的程序。
      • Rx就是一種響應(yīng)式編程,來創(chuàng)建基于事件的異步程序

      RXJava簡介

      RxJava就是一種用Java語言實現(xiàn)的響應(yīng)式編程,來創(chuàng)建基于事件的異步程序

      官方定義:一個在 Java VM 上使用可觀測的序列來組成異步的、基于事件的程序的庫

      RXJava原理

      • RxJava: 基于 一種擴展的觀察者模式
      • RxJava的擴展觀察者模式中有4個角色:

      簡單使用方法

      代碼示例

      Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext(1); emitter.onComplete(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Integer integer) throws Exception { Log.d(TAG, “accept integer = ” + integer); } });

      解釋說明:

      • 創(chuàng)建被觀察者,發(fā)送事件,即emitter.onNext(1),發(fā)送了數(shù)字1;
      • 指定被觀察者的執(zhí)行線程,Schedulers.io();
      • 觀察者處理接收到的數(shù)據(jù);
      • 切換線程到主線程,觀察者將在主線程處理這些數(shù)據(jù)。

      實戰(zhàn)項目解析

      添加依賴

      compile ‘io.reactivex.rxjava2:rxjava:2.0.0-RC5’compile ‘io.reactivex.rxjava2:rxandroid:2.0.0-RC1’

      基理

      Observable和Observer通過subscribe()方法實現(xiàn)訂閱關(guān)系; Rxjava中是**自動發(fā)送事件**的, 一旦**訂閱**就開始**發(fā)送**;


      基本使用三個步驟

      • 第一步,創(chuàng)建Observable, Emitter是發(fā)射器的意思, 在subscribe方法中不斷調(diào)用發(fā)射器的方法; 總共有onNext()、onComplete()、onError()三個方法; 用法參考Rxjava1:
      • 第二步,創(chuàng)建Observer, 總共有onNext()、onComplete()、onError()、onSubscribe()四個方法; 其中,**onNext()、onComplete()、onError()**三個方法分別對應(yīng)著第一步中**Observable**的**onNext()、onComplete()、onError()**三個方法, 只要**Observable**發(fā)出(調(diào)用)對應(yīng)的方法, **Observer**對應(yīng)的方法就會被調(diào)用;
      • onError()和onComplete是互斥的,一次只能調(diào)用一個;
      • 第三步,訂閱, observable.subscribe(observer);

      下面開始實戰(zhàn)內(nèi)容

      • 在app/build.gradle中添加依賴:

      dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) implementation ‘com.android.support:appcompat-v7:28.0.0’ implementation ‘io.reactivex.rxjava2:rxjava:2.0.0-RC5’ implementation ‘io.reactivex.rxjava2:rxandroid:2.0.0-RC1’ implementation ‘com.squareup.retrofit2:retrofit:2.1.0’ implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’// compile ‘com.squareup.retrofit2:adapter-rxjava:2.1.0’// compile ‘com.jakewharton.rxbinding:rxbinding:0.4.0’}

      activity_main.xml:

      MainActivity,java: 第一步,通過create()創(chuàng)建Observable(模擬對象:程序員), 通過onNext()發(fā)送數(shù)據(jù):

      public Observable getObservable() { return Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter e) throws Exception { e.onNext(“奏笛”); e.onNext(“泡吧”); e.onComplete(); } }); }

      第二步,創(chuàng)建Observer(模擬對象:程序員女朋友), 創(chuàng)建的方法是直接new:

      public Observer getObserver(){ return new Observer() { @Override public void onSubscribe(Disposable d) { Log.d(“MainActivity”,”onSubscribe”); } @Override public void onNext(String value) { Log.d(“MainActivity”,”onNext”); } @Override public void onError(Throwable e) { Log.d(“MainActivity”,”onError”); } @Override public void onComplete() { Log.d(“MainActivity”,”onComplete”); } }; }

      第三步,在click()中, getObservable和observer, 實現(xiàn)訂閱:

      public void click(View view) { Observable observale = getObservable(); Observer observer = getObserver(); observale.subscribe(observer); }

      以上便完成了一個最基本的使用; 運行效果:

      點擊按鈕后打印日志:

      由此可以應(yīng)證, Rxjava中是自動發(fā)送事件的, 一旦Observable 被 observer 訂閱了(observale.subscribe(observer);), Observable就開始發(fā)送; 由Observable通過自身ObservableOnSubscribe中的subscribe()中的 onNext()等方法自動發(fā)出信息, observer接收到信息后執(zhí)行對應(yīng)的onNext()等方法; 在訂閱之后,Observer中, onSubscribe()是每次接收數(shù)據(jù)之前必須要調(diào)用的方法; onNext()則是對應(yīng)Observable調(diào)用的次數(shù)去調(diào)用相應(yīng)的次數(shù); onComplete()、onError()對應(yīng)完成/異常狀態(tài)時候調(diào)用;

      @Override public void onSubscribe(Disposable d) { Log.d(“MainActivity”,”onSubscribe”); }

      接下來關(guān)注一下Observer構(gòu)造方法中的onSubscribe()方法;

      其中注意參數(shù)Disposable d,

      Disposable是一次性的意思; 其主要有以下兩個方法:

      用法示例 (用于監(jiān)聽Observable發(fā)送的數(shù)據(jù), 如果Observable發(fā)送的數(shù)據(jù)等于某個值, 就斷絕訂閱關(guān)系):

      更改Observable代碼:

      public Observable getObservable() { return Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter e) throws Exception { e.onNext(“奏笛”); e.onNext(“泡吧”); e.onNext(“酗酒”); e.onComplete(); } }); }

      運行示例,點擊按鈕:

      可以發(fā)現(xiàn)已經(jīng)沒有onComplete()方法的打印信息了, 因為在onNext()中途已經(jīng)斷絕訂閱關(guān)系了;

      另外還有省略observer的簡潔寫法

      public void click(View view) { Observable observale = getObservable(); observale.subscribe(new Consumer() { @Override public void accept(String s) throws Exception { if(s.equals(“奏笛”)){ Log.d(“MainActivity”,”收到奏笛?。∵@里類似于Observer的onNext()”); } if(s.equals(“吟詩”)){ Log.d(“MainActivity”,”收到吟詩??!這里類似于Observer的onNext()”); } if(s.equals(“酗酒”)){ Log.d(“MainActivity”,”收到酗酒??!這里類似于Observer的onNext()”); } } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { Log.d(“MainActivity”,”這里類似于Observer的onError()”); } }, new Action() { @Override public void run() throws Exception { Log.d(“MainActivity”,”這里類似于Observer的onComplete()”); } }); } public Observable getObservable() { return Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter e) throws Exception { e.onNext(“奏笛”); e.onNext(“吟詩”); e.onNext(“酗酒”); e.onComplete(); } }); }

      運行示例,點擊按鈕:

      更改上面代碼,

      用Observable.just()創(chuàng)建Observable對象,

      效果也是一樣的; 運行示例,點擊按鈕,打印日志同上:

      public Observable getObservable() { Observable observable = Observable.just(“奏笛”,”吟詩”,”酗酒”); return observable; }

      或者顯示在TextView上:

      用Observable.fromArray()創(chuàng)建Observable對象,

      Observable observable = Observable.fromArray(“奏笛”,”泡吧”,”吟詩”); 其實用法跟**just()**是一樣的; **just()**源碼如下, 里面最終也是調(diào)用**fromArray()**實現(xiàn)的:

      用Observable.fromCallable()創(chuàng)建Observable對象

      特點:只能返回一個數(shù)據(jù);

      本節(jié)筆記Activity全文(注意io.reactivex包的引用):

      package com.cniao5.cniao5rxjava2demo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.TextView;import java.util.concurrent.Callable;import io.reactivex.Observable;import io.reactivex.ObservableEmitter;import io.reactivex.ObservableOnSubscribe;import io.reactivex.Observer;import io.reactivex.disposables.Disposable;import io.reactivex.functions.Action;import io.reactivex.functions.Consumer;public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.text); } public void click(View view) { Observable observale = getObservable();// Observer observer = getObserver();//// observale.subscribe(observer);// observale.subscribe(new Consumer() {// @Override// public void accept(String s) throws Exception {// Log.d(“MainActivity”,”accept=”+s);//// textView.append(s);// textView.append(“//n”);// }// }); observale.subscribe(new Consumer() { @Override public void accept(String s) throws Exception { if(s.equals(“奏笛”)){ Log.d(“MainActivity”,”收到奏笛?。∵@里類似于Observer的onNext()”); } if(s.equals(“吟詩”)){ Log.d(“MainActivity”,”收到吟詩?。∵@里類似于Observer的onNext()”); } if(s.equals(“酗酒”)){ Log.d(“MainActivity”,”收到酗酒?。∵@里類似于Observer的onNext()”); } textView.append(s); textView.append(“”); } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { Log.d(“MainActivity”,”這里類似于Observer的onError()”); } }, new Action() { @Override public void run() throws Exception { Log.d(“MainActivity”,”這里類似于Observer的onComplete()”); } }); } public Observable getObservable() {// Observable observable = Observable.just(“奏笛”,”吟詩”,”酗酒”);// Observable observable = Observable.fromArray(“奏笛”,”泡吧”,”吟詩”); return Observable.fromCallable(new Callable() { @Override public String call() throws Exception { return “奏笛”; } });// return observable;// return Observable.create(new ObservableOnSubscribe() {// @Override// public void subscribe(ObservableEmitter e) throws Exception {// e.onNext(“奏笛”);// e.onNext(“吟詩”);// e.onNext(“酗酒”);// e.onComplete();//// e.onError(new);//// }// }); } public Observer getObserver(){ return new Observer() { Disposable dd =null;//定義一個變量局部變量 @Override public void onSubscribe(Disposable d) { dd = d;//把這段訂閱關(guān)系的Disposable變量拿下來 Log.d(“MainActivity”,”onSubscribe”); } @Override public void onNext(String value) { Log.d(“MainActivity”,”onNext”); if(value.equals(“酗酒”)){ dd.dispose();//如果發(fā)送的數(shù)據(jù)等于某個值,就斷絕關(guān)系 Log.d(“MainActivity”,”你的小可愛已經(jīng)不想理你了?。?!”); } } @Override public void onError(Throwable e) { Log.d(“MainActivity”,”onError”); } @Override public void onComplete() { Log.d(“MainActivity”,”onComplete”); } }; }}

      小結(jié)

      以上是我在項目中使用Rxjava的一些介紹和使用心得。以及由此引出的引入三方庫之后,我們應(yīng)該如何使用和學(xué)習(xí)的一些粗淺看法。Android架構(gòu)師的學(xué)習(xí)進階路線及資料,需要可以私信我發(fā)送“核心筆記”或“手冊”即可獲??!

      一句話,就是在引入一個庫后,能夠?qū)W習(xí)它背后的原理。

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年7月6日 15:28
      下一篇 2022年7月6日 15:29

      相關(guān)推薦

      • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

        對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

        2022年11月27日
      • 30個無加盟費的項目(茶顏悅色奶茶店加盟費多少)

        茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開業(yè),開張不到半小時,門店就人滿為患,消費者的購買熱情十分高漲,而由于人流量過大造成擁堵,茶顏悅色也不得不暫停營業(yè)。 當然,這里面排…

        2022年11月27日
      • 凈利潤率越高越好嗎(凈利潤率多少合適)

        一、持續(xù)增收不增利,平均凈利潤率首次跌入個位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來看,大部分企業(yè)營業(yè)收入呈增長態(tài)勢,E50企業(yè)平均同比增速達到17.3%,但是利潤增速則明…

        2022年11月26日
      • 《寶可夢朱紫》夢特性怎么獲得?隱藏特性獲取方法推薦

        寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

        2022年11月25日
      • 《寶可夢朱紫》奇魯莉安怎么進化?奇魯莉安進化方法分享

        寶可夢朱紫中的奇魯莉安要怎么進化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進化方法分享 奇魯莉安…

        2022年11月25日
      • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬億元大市場迎來新規(guī)

        近日,財政部印發(fā)《關(guān)于進一步推動政府和社會資本合作(PPP)規(guī)范發(fā)展、陽光運行的通知》,從做好項目前期論證、推動項目規(guī)范運作、嚴防隱性債務(wù)風(fēng)險、保障項目陽光運行四個方面進一步規(guī)范P…

        2022年11月25日
      • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

        CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實名認證,可以是付費,可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

        2022年11月25日
      • 推薦3種白手起家的賺錢項目(白手起家賺錢項目有哪些)

        如今社會壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要創(chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個低成本又賺錢的項目是大多數(shù)人最期望的了,那么有哪些…

        2022年11月25日
      • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點)

        如今抖音這個短視頻的變現(xiàn)能力越來越突顯了,尤其是在平臺上開通直播,更具有超強的帶貨屬性,已經(jīng)有越來越多的普通人加入到其中了。不過直播帶貨雖然很火,但是也不是每個人都能做好的,那么在…

        2022年11月24日
      • 事件營銷案例

        篇一成功營銷案例小故事成功銷售案例小故事篇1模仿 一個人想做一套家具,就走到樹林里砍倒一棵樹,并動手把它鋸成木板這個人鋸樹的時候,把樹干的一頭擱在樹墩上,自己騎在樹干上還往鋸開的縫…

        2022年11月24日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息