⑴ rxjava2 多長時間響應一次
才學RxJava的時候還是挺困惑的,感覺有特別多的對『時間』的操作符,比如timer()、interval()、delay()、defer()等等……總之功能太強大,直接嚇跑了一群初學者。身邊有朋友這樣跟我說:RxJava為了省點代碼,把邏輯弄這么復雜,看著都暈了,我寧願多寫點if-else我只能回復:用RxJava邏輯肯定是變簡單了,一旦用上手了,再也離不開了。現在讓我寫個Thread+Handler我都覺得麻煩。timer()這里說的是新版本的timer(),而老版本的timer()已經跟interval()合並了。timer():創建一個Observable,它在一個給定的延遲後發射一個特殊的值這里需要注意,定義裡面說的是『一個』,所以有別於之前用的TimerTask。timer()只是用來創建一個Observable,並延遲發送一次的操作符,timer()並不會按周期執行。interval()interval():創建一個按固定時間間隔發射整數序列的Observable這個比較好理解,interval()也是用來創建Observable的,並且也可以延遲發送。但interval()是按周期執行的,所以可以這么認為:interval()是一個可以指定線程的TimerTask(威力加強版……)delay()delay():延遲一段指定的時間再發送來自Observable的發送結果語文沒學好肯定讀不懂這一段,我才看到這句話的時候也懵了……其實delay()的常規使用跟timer()一致,那區別在哪呢?delay()是用於流中的操作,跟map()、flatMap()的級別是一樣的。而timer()是用於創建Observable,跟just()、from()的級別是一樣的。總結timer():用於創建Observable,延遲發送一次。interval():用於創建Observable,跟TimerTask類似,用於周期性發送。delay():用於事件流中,可以延遲發送事件流中的某一次發送。網路連接失敗的處理看過最前面那篇文章的應該很清楚retryWhen()是什麼了。我再來總結一下,retryWhen()的直面意思就是:發生錯誤了,接下來該做什麼。retryWhen()是RxJava的一種錯誤處理機制,當遇到錯誤時,將錯誤傳遞給另一個Observable來決定是否要重新給訂閱這個Observable
⑵ retrofit 2 支持rxjava2了嗎
貌似還沒有支持
⑶ Android 開發有哪些新技術出現
1、開發工具
Android Studio: Google 官方放棄 Eclipse 和 Android Studio 普及。AS 雖然不算新,但是對 Android Studio 這個軟體的更新速度快的驚人,有大量的新功能發布。例如支持很多註解代碼提示註解、Live code template、支持自動生成 Parcelable 實現等等,作為開發者,持續關注這個更新列表 Recent Changes,一定會讓寫代碼的生活更加美好。
2、編程「語言」
Kotlin:作為 Android 領域的 Swift,絕對如沐新風。拋棄沉重的 Java 語法,Kotlin 融入了很多現代編程語言的思想,作為開發者,接受新的語言,了解新語言的發展趨勢,更有利於開闊你的思路和加深對語言的理解。在 Android 開發上,使用 Kotlin 並不會付出什麼代價,為什麼不來試試使用Kotlin進行Android開發。
React Nativ: 跨平台一直是程序員的夢想,而且移動應用的跨平台解決方案也很多,因為 Facebook 的參與和力推,讓這個解決方案帶上了光環。第一個用 React Native 開發的 App 已經在 Google Play 上架 Facebook 廣告管理工具,聽說 Android 的 SDK 也馬上會到來,React Native。
Sky:與 React Native 類似,使用 Web 開發語言來做移動平台的開發,雖然這個只是一個嘗試,但是這是 Google 自身推出的,特別是在 Java 語言的使用上敗訴之後,這可能會有一些作為呢,domokit/sky_sdk。
3、開發模式
Dagger 2:依賴注入並不是什麼新技術,但是使用在 Android 確實一個新的嘗試。Android App 越來越被當成嚴肅的大型項目來構建,很多在以前大型伺服器開發上使用的技術都被應用到了移動開發。Android 開發分模塊開發,使用 Dagger 來松耦合模塊。特別值得一體的是,Dagger 2 現在由 Google 親自接管。 Dagger ‡ A fast dependency injector for Android and Java。
MVP:因為 Android 並沒有嚴格的業務和界面區分,項目一復雜,就很容易使代碼陷入混亂。現在 Android 開發社區對 MVP 模式討論越來越熱,覺得 MVP 是非常適合 Android APP 開發。MVP for Android: how to organize the presentation layer。
RxAndroid:函數響應式編程(Functional Reactive Programming)也不是新內容,RxAndroid 把 RxJava 帶到 Android 環境中。很多時候,編寫 Android 程序,也可以看成是數據的處理和流動,換一種思想編程,曾經看起來很棘手的問題,瞬間就很優雅的解決了:ReactiveX/RxAndroid。
MVVM:這是因為開始官方支持 DataBinding,把 MVVM 直接帶到 Android 中。數據綁定在 Windows WPF 和 Web 已經非常常見,它非常高效的開發效率,只關心數據和業務。這也對 Android 開發來說,無疑是一個非常重大的影響:android UI設計MVVM設計模式討論?。
插件化:針對大型 Android 項目,很多 App 開始使用插件來分模塊構建相對獨立的功能。
Hybrid:完全使用 HTML 5 開發 App,目前還不成熟。但是折中方案在很多情況下是非常適合的,典型的就是微信,大部分信息展示都是通過 H5 來完成,同時通過 Hybird 方式,把 Web 和 Native 打通,提供給網頁訪問本地資源的能力。
4、UI設計
Material Design:已經紅遍了大江南北,這方面的討論實在太多了,而且各種支持庫都有了,特別是 Google 官方出了一個支持庫 Android Design Support Library。
Sketch 3:這是一個專為設計移動端 UI 的設計工具,作為開發者,不用懂那麼復雜的 PS 使用,也可以做非常專業設計。
⑷ 真的有必要用rxjava嗎
RxJava目前項目在用還是很穩定的 目前網路用的是Rxjava+ReTrofit+okHttp這些框架已經很成熟了完全可以引入項目
⑸ io.reactivex.rxjava2是android下哪個包引用的
你下載的文件比較奇怪,也許是下載軟體重命名錯誤,下載下來的文件應該是一版個zip壓縮包,權解壓出來放到手機卡上就行了。試試.bmap擴展名改成.zip能不能解壓。 到78App網站查看回答詳情>>
⑹ retrofit2+MVP+rxjava2+rxlifecycle2 為什麼無法解決內存泄露
隨著Android第三庫的普及, RxJava 和 RxAndroid ( tiveX/RxAndroid )越來越被人熟知,簡潔的語法,配合Java8 Lambda表達式,使代碼的結構更加清晰,通過線程調度器更容易控制和切換線程,種種優點,使用它的人也越來越多。但是使用不好,很容易導致內存泄露。 Rxlifecycle (b.com/trello/RxLifecycle )就使被用來嚴格控制由於發布了一個訂閱後,由於沒有及時取消,導致Activity/Fragment無法銷毀導致的內存泄露 。
RxJava和RxAndroid
compile 'io.reactivex:rxandroid:1.0.1'compile 'io.reactivex:rxjava:1.0.16'12
Rxlifecycle
compile 'com.trello:rxlifecycle:0.3.0'
compile 'com.trello:rxlifecycle-components:0.3.0'12
Rxlifecycle 使用
Activity/Fragment需繼承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。
一、bindToLifecycle()方法
在子類使用Observable中的compose操作符,調用,完成Observable發布的事件和當前的組件綁定,實現生命周期同步。從而實現當前組件生命周期結束時,自動取消對Observable訂閱。
Observable.interval(1, TimeUnit.SECONDS)
.compose(this.bindToLifecycle())
.subscribe(new Action1<Long>() {
@Override
public void call(Long num) {
Log.i(TAG, " " +num);
}
});12345678
二、bindUntilEvent() 方法
使用ActivityEvent類,其中的CREATE、START、 RESUME、PAUSE、STOP、 DESTROY分別對應生命周期內的方法。使用bindUntilEvent指定在哪個生命周期方法調用時取消訂閱。
Observable.interval(1, TimeUnit.SECONDS) .compose(this.bindUntilEvent(ActivityEvent.PAUSE))
.subscribe(mSub);