1. 程式人生 > >rxjava2的Flowable使用方法

rxjava2的Flowable使用方法

1.Flowable(可觀察者)

   private void test5(){
        Log.d(TAG, "test5執行了");;
        Flowable<Integer> flowable = Flowable.create(new FlowableOnSubscribe<Integer>() {
            @Override
            public void subscribe(final FlowableEmitter<Integer> emitter) throws Exception {
                emitter.setCancellable(new Cancellable() {
                    @Override
                    public void cancel() throws Exception {
                        Log.d(TAG, "取消訂閱了噢噢噢噢");
                    }
                });
                if(callBack == null){
                    callBack=new CallBack() {
                        @Override
                        public void test(String msg) {
                            Log.d(TAG, "發射了訊息");
                            emitter.onNext(1);
                        }
                    };
                }

            }
        }, BackpressureStrategy.BUFFER); //增加了一個引數

        Subscriber<Integer> subscriber = new Subscriber<Integer>() {
            @Override
            public void onSubscribe(Subscription s) {
                Log.d(TAG, "onSubscribe");
                //  s.request(20);//策略BUFFER ,消費能力20 結果只收到20條,但是資料依然在發射
                // s.request(0);//策略BUFFER ,消費能力0 結果收不到資料,但是資料依然在發射
                s.request(129);
                //策略DROP,消費能力20,結果只收到連續的20條,但是資料依然在發射
                //策略DROP,消費能力10000,結果資料128條之後,發現直接拋到844了,這說明預設緩衝區滿了之後
                //129條沒有能進入到緩衝區,為什麼呢,因為緩衝區滿了,庫存就那麼大,根據DROP策略,只能丟棄
                //簡單的說,DROP可能導致新產生的事件被丟棄,收到的事件可能會斷層
            }
            @Override
            public void onNext(Integer integer) {
                Log.d(TAG, "onNext: " + integer);

            }
            @Override
            public void onError(Throwable t) {
                Log.w(TAG, "onError: ", t);
            }
            @Override
            public void onComplete() {
                Log.d(TAG, "onComplete");
            }
        };
        /**
         * .doOnCancel(new Action() {
        @Override
        public void run() throws Exception {
        Log.d(TAG, "取消註冊了");
        }
        })
         */

        flowable.doOnCancel(new Action() {
            @Override
            public void run() throws Exception {
                Log.d(TAG, "取消註冊了");
            }
        })
                .doOnSubscribe(new Consumer<Subscription>() {
            @Override
            public void accept(Subscription subscription) throws Exception {
                Log.d(TAG, "您訂閱了");
                mSubscription=subscription;
            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(subscriber);
}


相關推薦

visualvm監控jvm及遠程jvm監控方法

title sdn replace html 題解 日誌 命令工具 lin lac VisualVM是Sun的一個OpenJDK項目,其目的在於為Java應用創建一個整套的問題解決工具。它集成了多個JDK命令工具的一個可視化工具,它主要用來監控JVM的運行情況,可以用它來

模板方法

實現 使用場景 avi sdn 優勢 模板方法模式 spa jsb net 一.使用場景 當我們要完畢在某一細節層次一致的一個過程或一系列步驟,但其個別步驟在更具體的層次上的實現可能不同一時候,我們通常考慮用模板方法模式來處理。

java 方法

ima ava 結果 http blog 減少 設置 img 重復 方法是用於封裝一定特定的邏輯功能 方法也叫(函數,過程) 方法盡可能獨立---只幹一件事 可以被反復調用,減少代碼重復 方法參數可有可無,有參更靈活 返回值:當方法需要返回結果是,設置特定返回結果類

xubuntu 17.04 和 iphone 6互傳文件方法——使用libimobiledevice就可以像u盤一樣操作文件了

ges this med ipo val apt app edev pair I need to preface this by saying I‘m also new to Linux, but I‘ve got it working I think. The inst

網站需要備案?對這個流程表示呵呵噠- -快速免備案方法

支持 content lang order borde 惡心 doc 適合 src 對於備案流程,惡心到我了??即將完成的時候,發現真尼瑪麻煩!!!!!菜鳥還沒工作不舍得買好服務器,還是等以後穩定了再備案吧~~ 僅僅適合用於個人網站,且對於搜索引擎不友好,本人主要用於快速訪

VM中CentOS7本地配置yum源方法

vm中centos7本地配置yum源方法因為虛擬機中安裝CentOS7未聯網,所以通過本地配置yun源來實現安裝操作。一、通過光盤當做本地yum倉庫1.掛載當前光盤至某目錄 ]#mount /dev/cdrom /mnt或者# mount -r -t iso9660 /dev/cdrom /media

方法:綁定或無綁定

pre color nbsp def col += objects little easy Python的方法是一種對象,可以由實例或類來進行讀取。 1、無綁定類方法對象:無self 通過對類進行點號運算從而獲取類的函數屬性,會傳回無綁定方法對象。調用該方法時,必須明確提供

學習過程遇到問題的解決方法

_exit 變量 prot 預定義變量 void col malloc() lee 項目組 1.select.sh 用sh -x 和bash -x的進行腳本調試時,前者會報錯誤,這是內置shell的原因。 2.awk內置函數使用時,定義變量需要用-v ;awk -v s

fullpage.js使用方法

asc 分享 () att 後來 log itl ttr png 了解: 【1】之所以叫做fullpage,是因為它可以全屏滾動,擁有強大的功能。 【2】它依賴於jQuery庫,所以在使用fullpage之前先引入jQuery庫。 使用: 【1】<link rel="

js去重方法

func clas 原型 nbsp 裝逼 {} 一點 pre for function remove(array){ var obj={}; newarray=[]; for(var i in array){ console.log(i); var arg=array[i

javascript字符串方法總結

大小寫 comm 其他 tolower 匹配 一行 ror 運算 轉換 一、單引號字符串內部可以使用雙引號,雙引號字符串內部也可以使用單引號 "hello ‘world‘" ‘welcome "to" js‘ 二、多行和轉義 如果要在單引號字符串的內部,使用單引號(或者

Mysql學習之十二:JDBC連接數據庫之DriverManager方法

url state 種類 delet rom 條件 管理系 ont into JDBC連接數據庫 ?創建一個以JDBC連接數據庫的程序,包括7個步驟: 1、載入JDBC驅動程序: 在連接數據庫之前。首先要載入想要連接的數據庫的驅動到JVM

python 學習方法

模塊 經驗 utili 交互 class 印象 www 進行 os.path 依據本人的學習經驗,我總結了下面十點和大家分享: 1)學好python的第一步。就是立即到www.python.org站點上下載一個python版本號。我建議剛開始學習的人,不要下載具有ID

xcode 沒有 iphone4s 模擬器 的解決方法..

net 項目 time base 下載 word imu iphone bsp 我們的項目是8.0的, 要支持iphone 4s 讓我覺得很蛋疼。 首先是Xcode 8 沒有 iphone 4s的模擬器了。 由於線上安裝的方式,不管是在code的add si

web測試中的測試點和測試方法總結

動態 小數 圖片尺寸 提示信息 方便 margin style 容錯性 字符型 測試是一種思維,包括情感思維和智力思維,情感思維主要體現在一句俗語:思想決定行動上(要懷疑一切),智力思維主要體現在測試用例的設計上。具有了這樣的思想,就會找出更多的bug。 一、輸入框

List 常用方法

ins 接口 tar rabl 默認 集合 表達式 ret urn List 計算集合中某屬性值的總和 list.Sum(ins=>ins.Field); Sort()方法,摘要:使用默認比較器對整個 System.Collections.Generic.List&

Map遍歷四種常用方法

map.entry pri ext try set next() 方式 keys println Map常用四種遍歷方式 一:   Map<String,String> map = new HashMap<String,String>();

cpan安裝perl module的方法和步驟(備忘帖)

roo for lora pre permanent help base -i rmi 適用場景:不具備root權限且沒有sudo權限的普通用戶安裝perl module安裝步驟:1)刪除/.cpan/.lockrm -rf /home/users/.cpan/.lock2

Visual Lisp獲得網絡時間的方法

fix get visual ons isp modified family 2.x stat (defun c:tt (/ ie-obj) (setq ie-obj (vlax-get-or-create-object "Msxml2.xmlhttp")) (vl

JQ常用方法(哈哈)

size ... con var get false 語法 alert php 1ajax請求 $(function(){ $("#send").click(function(){ $.ajax({ type:"get", async:true,