top of page
搜尋

[Android] 使用 RxJava 實作非同步

  • 作家相片: 植盛 范
    植盛 范
  • 2017年1月28日
  • 讀畢需時 2 分鐘

前陣子公司在開發有關 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

歡迎大家多多指點

 
 
 

最新文章

查看全部
[JAVA] Override ENUM valuelOf

前言 ENUM 是一個在開發時基本上一定會用的 ENUM 可以有效的管理字串、static 類型常數、配合 switch case 當然 是否有必要把所有的字串、static 類型常數都給 ENUM 管理 這個就必須要視開發需求而定了 因為每個情境不同...

 
 
 
[DIARY] 工作心得

從事工程師的工作至今快要兩年了 對於很多同行來講還是一個菜到不能再菜的資歷 現在回想或者回去看到以前寫的 Code 當下真的懷疑這是自己寫的嗎? 怎麼可以寫得那麼爛 1. 完全沒做記憶體相關的管理 2. 專案的架構亂七八招 3. 每個 Method 都不知道是幹甚麼用的...

 
 
 

Comments


© 2023 by Biz Trends. Proudly created with Wix.com

bottom of page