[Android] 使用 RxJava 實作非同步
前陣子公司在開發有關 IPCAM 的項目
原本是使用 Android 內建的元件 WebView 來取得 IPCAM 的 Stream
但是卻有兩個問題搞死我了
1. 低於 Android 5.0 的版本在 WebView 上無法顯示畫面
不論是直接load URL、load HTML String 還是直接 load 寫好的 HTML檔,
但使用手機內的 Google 瀏覽器卻可以顯示,
然而 load HTML String 如果是 load iframe HTML String 卻可以顯示畫面但是仍然無法解決第二個問題
2. 取回來的畫面大小無法調整到可以滿足設計上的需求
即使畫面取回來也顯示得出來了,
但是 IPCAM 的畫面卻無法占滿整個元件的大小。
使用百分比去調整、WebSetting 中設定皆無法達到設計上的需求
所以當時請教 Google 大神啦
找到了在 GitHub 上的 MjpegView
但在使用上仍然有幾個問題 (我不過就是要顯示監視器畫面而已有那麼難嘛!!!!)
1. Timeout
專案中雖然有提供 Timeout 的 API,
但是我怎麼用都是沒有用
2. OOM
由於 IPCAM 的 Stream 是一直傳過來的,
所以在記憶體以及 Thread 上的管理真的花了很大的功夫
但是從中看到了 RxJava
也就是這篇文章的重點了
所以我試著把原本專案中學到的 AsyncTask 換成 RxJava
並且寫一個簡單到不能再簡單的 Example
首先,在 Grable 中導入相關的 Class
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
(版本不一定要跟本文使用的一樣)
第二步, Activity 我先簡單設置了一個 Button 的 ClickListener 接口
最後,我建立一個 Class - RxJavaConnect,並且裡面建立一個 connect() Method
這樣就完成了非同步了
當然這只是簡單的 Example
有關 RxJava 的詳細介紹可以到這個網站,
個人覺得這個網站寫得挺詳細的,
只是文章長了點
這篇有關 RxJava 的文章就這樣啦
至於寫好的 Example 在 GitHub
歡迎大家多多指點