RxJava 和 RxAndroid 一 (基礎)
package lib.com.myapplication; import android.support.annotation.NonNull; import android.util.Log; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import rx.Observable; import rx.subjects.PublishSubject; import rx.subjects.Subject; /** * Created by ${zyj} on 2016/5/6. */ public class RxBus { private static final String TAG = RxBus.class.getSimpleName(); private static RxBus instance; public static boolean DEBUG = false; public static RxBus get() { if (instance == null) { synchronized (RxBus.class) { if (instance == null) { instance = new RxBus(); } } } return instance; } private RxBus() { } private ConcurrentHashMap<Object, List<Subject>> subjectMapper = new ConcurrentHashMap<>(); @SuppressWarnings("unchecked") public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) { List<Subject> subjectList = subjectMapper.get(tag); if (null == subjectList) { subjectList = new ArrayList<>(); subjectMapper.put(tag, subjectList); } Subject<T, T> subject; subjectList.add(subject = PublishSubject.create()); if (DEBUG) Log.d(TAG, "[register]subjectMapper: " + subjectMapper); return subject; } public void unregister(@NonNull Object tag, @NonNull Observable observable) { List<Subject> subjects = subjectMapper.get(tag); if (null != subjects) { if ( observable != null && subjects.contains( observable )){ subjects.remove((Subject) observable); } if (isEmpty(subjects)) { subjectMapper.remove(tag); } } if (DEBUG) Log.d(TAG, "[unregister]subjectMapper: " + subjectMapper); } public void post(@NonNull Object content) { post( content.getClass().getName(), content); } @SuppressWarnings("unchecked") public void post(@NonNull Object tag, @NonNull Object content) { List<Subject> subjectList = subjectMapper.get(tag); if (!isEmpty(subjectList)) { for (Subject subject : subjectList) { subject.onNext(content); } } if (DEBUG) Log.d(TAG, "[send]subjectMapper: " + subjectMapper); } private boolean isEmpty(Collection collection) { return null == collection || collection.isEmpty(); } }
相關推薦
RxJava 和 RxAndroid 一 (基礎)
package lib.com.myapplication; import android.support.annotation.NonNull; import android.util.Log; import java.util.ArrayList; import java.util.Colle
rxJava和rxAndroid原始碼解析系列四之subscribeOn和observeOn的理解(學習終結篇)
本篇文章主要解決subscribeOn和observeOn這兩個方法為什麼subscribeOn只有一次有效果,observeOn切換多次回撥的都有效果。 不知道朋友有沒有看過rxandroid的原始碼,如果看過的話,就會迎刃而解,沒什麼疑慮啦。沒看過原始碼的朋友,可以看看我這個系列的前幾篇文章
rxJava和rxAndroid原始碼解析系列二之observer訂閱
建立完Observable物件後,以後一步ObservableObserveOn.subscribe(new Observer<String>() {.....})這一步又發生了什麼呢? 接著跟蹤原始碼。 @SchedulerSupport(Schedu
RxJava和RxAndroid用法詳解
RxJava 在 GitHub 主頁上的自我介紹是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一個在 J
RxJava 和 RxAndroid 三(生命週期控制和記憶體優化)
rxjava rxandroid 趙彥軍 RxJava使我們很方便的使用鏈式程式設計,程式碼看起來既簡潔又優雅。但是RxJava使用起來也是有副作用的,使用越來越多的訂閱,記憶體開銷也會變得很大
RxJava 和 RxAndroid 四(RxBinding的使用)
對Rxjava不熟悉的同學可以先看我之前寫的幾篇文章 前言:RxBinding 是 Jake Wharton 的一個開源庫,它提供了一套在 Android 平臺上的基於 RxJava的 Binding API。所謂 Binding,就是類似設定 OnClickListener 、設定
RxJava 和 RxAndroid 二(操作符的使用)
前言:對Rx不瞭解的朋友可以先看我的第一篇博文 ,是對Rxjava的基本介紹 1、merge操作符,合併觀察物件 19 List<String> list1 = new ArrayList<>() ; 20 List<String&g
RxJava 和 RxAndroid 五(執行緒排程)
對rxJava不瞭解的同學可以先看 本文將有幾個例子說明,rxjava執行緒排程的正確使用姿勢。 例1 Observable .create(new Observable.OnSubscribe<String>() {
程式設計師面試寶典隨筆記(一)---執行緒和程序1,-基礎資訊
①程式,程序,執行緒的區別 程式:程式是由一系列的指令和邏輯組成的一個靜態檔案(如cpp檔案),無論能不能執行,它都客觀的存在於儲存器中。 程序:程序是計算機中的程式關於某資料集合
python之scrapy(一)基礎和入門
Scrapy框架的使用 一、 Scrapy框架的介紹 Scrapy是一個基於 Twisted 非同步處理的框架,是一個純python的網路爬蟲框架,是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 其可以應用在資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了頁面抓取 (
個性化定義部落格園 (一)---基礎準備以及新增動態背景和音樂控制元件
寫在前面 擁有部落格僅僅只是開始,後續該怎樣美化部落格?怎樣使部落格更有個性?這都需要我們一點點去做。由此,我總結出了一些方法,希望能對你有所幫助。我們將以部落格園美化來教你怎樣自定義部落格,使它看起來更加的個性化。 一,準備工作 我的面板選擇的
RxJava與RxAndroid基礎入門
相關視訊: RxJava與RxAndroid基礎入門 相關文章: 給 Android 開發者的 RxJava 詳解 一起來造一個RxJava,揭祕RxJava的實現原理 RxJava 到底是什麼 一個詞:非同步。 RxJava 好在哪 一個詞:簡潔。 非同步
Dubbo(一) —— 基礎知識和專案搭建
<!-- 1、指定當前服務/應用的名字(同樣的服務名字相同,不要和別的服務同名) --> <dubbo:application name="boot-user-service-provider"></dubbo:application>
Linux bash總結(一) 基礎部分(適合初學者學習和非初學者參考)
歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能
springboot學習筆記(一):基礎程式和配置
1 , springboot 介紹(來自百度百科) 簡介 微服務是一個新興的軟體架構,就是把一個大型的單個應用程式和服務拆分為數十個的支援微服務。一個微服務的策略可以讓工作變得更為簡便,它可擴充套件單個元件而不是整個的應用程式堆疊,從而滿足服務等級協議。
python基礎初識和變數(一)
-基礎 1.第一句Python -字尾名是可以是任意 -匯入模組時,如果不是.py檔案 ==>以後檔案字尾名是 .py 2.兩種執行方式 Python直譯器 py檔案路徑 Python 進入直譯器
Java多執行緒和記憶體模型(一):程序和執行緒基礎
Java多執行緒和記憶體模型(一) 由於java是執行在 JVM上 的,所以需要涉及到 JVM 的記憶體模型概念,需要理解記憶體模型,就需要多執行緒的基礎; 而執行緒是基於載體執行緒裡的,所以我們藉由作業系統的程序來講一講。 程序 什麼是程序?
Android響應式程式設計(一)RxJava前篇[入門基礎]
1.RxJava概述 ReactiveX與RxJava 在講到RxJava之前我們首先要了解什麼是ReactiveX,因為RxJava是ReactiveX的一種java實現。 ReactiveX是Reactive Extensions的縮寫,一般簡寫為
Novate:Retrofit2.0和RxJava的又一次完美改進加強(Tamic部落格 -CSDN)
作者/Tamic 前言 用過RxJava和Retrofit的朋友,用久了就會發現Retrofit說難不難,說簡不簡,對於實際專案中,單純的用Retrofit做請求庫,開發起來還是很多不便,必須請求頭和引數處理,API介面數目眾多時的處理,
android Java BASE64編碼和解碼一:基礎
今天在做Android專案的時候遇到一個問題,需求是向伺服器上傳一張圖片,要求把圖片轉化成圖片流放在 json字串裡傳輸。 類似這樣的: {"name":"jike","age":"20","pic