top of page

[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

歡迎大家多多指點

bottom of page