![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
前言
Rxjava,由于其基于事件流的鍊式調用、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
Github截圖
RxJava如此受歡迎的原因,在于其提供了豐富 & 功能強大的操作符,幾乎能完成所有的功能需求
今天,我将為大家帶來 Rxjava建立操作符的常見開發應用場景:功能防抖需求 ,并結合Retrofit 與RxJava 實作,希望大家會喜歡。
本系列文章主要基于 Rxjava 2.0
接下來的時間,我将持續推出 Android中 Rxjava 2.0 的一系列文章,包括原理、操作符、應用場景、背壓等等 ,有興趣可以繼續關注Carson_Ho的安卓開發筆記!!
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
示意圖
目錄
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
示意圖
1. 需求場景
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
示意圖
2. 功能說明
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
示意圖
注:關于 Rxjava中的throttleFirst() 操作符的使用請看文章:Android RxJava:過濾操作符 全面講解
3. 具體實作
// 注冊控件
Button button;
button = (Button)findViewById(R.id.button);
RxView.clicks(button)
.throttleFirst(2, TimeUnit.SECONDS) // 才發送 2s内第1次點選按鈕的事件
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object value) {
Log.d(TAG, "發送了網絡請求" );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對Error事件作出響應" + e.toString());
// 擷取異常錯誤資訊
}
@Override
public void onComplete() {
Log.d(TAG, "對Complete事件作出響應");
}
});
測試結果
在2s内,無論點選多少次,也隻會發送1次網絡請求
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
示意圖
4. Demo位址
5. 總結
本文主要講解了 Rxjava的實際開發需求場景:功能防抖需求
下面我将結合 實際場景應用 & Rxjava的相關使用架構(如Retrofit、Eventbus) ,繼續對 Android中 Rxjava 的實際開發需求場景進行深入講解 ,感興趣的同學可以繼續關注本人營運的Wechat Public Account:
請點贊!因為你的鼓勵是我寫作的最大動力!
不定期分享關于安卓開發的幹貨,追求短、平、快,但卻不缺深度。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyQzYxkzNjNTNkBTOvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)