RxJava在安卓開發中應用原始碼

banq發表於2014-05-22


Reactive系統是反覆被外界提示,持續的不斷地對外部輸出給與響應,類似命令列操作一樣,有一個提示符等待你輸入,只要輸入無論對錯總是給予響應。

RX-GDG是一個基於安卓的響應式程式設計的開源案例,文件見frp-android

在安卓中每天我們經常遭遇網路 資料庫和檔案系統以及各種裝置狀態,使用者輸入等等,這些操作經常是依賴的比如Network -> DB -> UI,這種工作不能在UI執行緒中進行,因為執行緒的上下文切換成本是昂貴的。

基於函式的響應式程式設計FRP改變我們傳統思路,比如迭代思考,從一個陣列中獲取資料傳統思路如下:

for (Integer number : numbers) {
 // Do some work
}
<p class="indent">

而使用FRP,我們對這個數字進行觀察,等它有資料通知我們後,我們再採取行動,如下:

Observable.from(numbers)
 .subscribe({ num ->
 // Do some work 
 })
<p class="indent">


這種觀察者API類似安卓的動畫API:

view.animate()
 .x(10)
 .y(10)
 .duration(1000)
 .start();
<p class="indent">


FRP可以進行操作組合。

下面是不使用FRP,純粹的回撥函式巢狀,回撥地獄:

apiService.login({
 apiService.getUserData({
 dbService.saveUserData({
 uiThread.updateUI({
 })
 })
 })
});
<p class="indent">

使用FRP以後解決回撥巢狀地獄了:

apiService.login() //Background thread
 .getUserData() //Background thread
 .saveUserData() //Background thread
 .subscribe(Subscriber { //UI thread
 void onComplete(){}
 void onError(Exception e){}
 void onNext(Object o){}
 });
<p class="indent">


更完整的原始碼點選標題進入GitHub專案

相關文章