October 30th, 2016
Android Weekly Issue #229
Android Weekly筆記, 本期內容包括: 性能庫Pury的插件化; 一種新的多選設計和實現; 音頻播放; Dagger的測試mock方案; ConstraintLayout的鏈式約束; Mobile Vision API的二維碼掃描功能; RxJava的使用缺陷討論; SOLID原則圖解.html
Pury是一個作profile的工具, 前面有過一篇文章介紹: Pury.react
本文是做者的另外一篇文章, 講Pury的插件化和擴展.android
另外, 做者最近正在集成Google Analytics到Pury中.git
在移動應用上的多選設計很難, 一般不是很靈活, 用起來也不舒服.github
本文推薦了一種全新的多選設計: 把屏幕分爲兩部分: 包括主要的列表和選中列表. 選中的項目自動移動到選中列表中去.api
這個設計概念的實現: ViewPager
+ 兩個RecyclerView
.app
做者選用了kotlin來實現. 列舉了幾個kotlin的features: Extension functions, Null safety, Collections, Better syntax.dom
做者的庫: Multi-Selection.ide
本文中還介紹瞭如何使用這個庫.工具
關於Android上的音頻播放, 做者的總結文章.
音頻播放的方式有:
關於MediaPlayer
的使用, 官方文檔: Media Playback, 本文中有一張圖是MediaPlayer
的生命週期圖.
做者逐個列舉了實際使用這些API時可能會遇到的一些issues. 而且最終選擇的最佳解決方案是Google的ExoPlayer, 2.0版本已經解決了她以前遇到的全部issues.
這篇文章講在使用Dagger1和Dagger2的項目中, 如何爲測試mock依賴.
做者講了ConstraintLayout
的一個重要特性: chains, 鏈.
chains是一個機制, 把一些獨立的Views鏈起來, 而後咱們能夠對這一個集合來採起一些行爲.
好比選中一個parent下的兩個TextView(這兩個原本是分別對齊parent的左右), 而後選擇"Center Horizontally", 就是創建了一個鏈.
在xml中實際上給這兩個view都各自加上了一條限制條件, 限制它們在對方的(左/右)邊, 這兩條對稱性的限制條件就構成了一個鏈.
這種鏈叫spread chains, 是默認的style.
使用Mobile Vision的Barcode API來進行二維碼檢測.
Code: barcode-detector.
大多數Rx相關的文章都說優勢, 本篇不一樣, 做者分享了在使用RxJava過程當中碰到的一些煩人的事情.
不過儘管有這些挫折, RxJava仍然是一個很棒的工具.
RxJava的文檔有時候對初學者來講會很具迷惑性.
推薦看: RxMarbles, 有操做符圖解.
RxJava的使用中會構建不少匿名類.
推薦使用: Retrolambda, Kotlin, 或Jack.
這是一個常見的錯誤, 若是隻寫好了Observable但沒有觸發, 一般是沒有subscribe, 由於Observable是被動的, 只有當被訂閱的時候纔會觸發.
有時候很難看見一塊代碼就知道執行結果, 必須往上游排查.
因此做者在他們的項目中規定了一項對於Observable的命名規範:
...Once
表示只發射一次; ...Stream
表示會發射值, 或者不發射, 可是不會completes; ...OnceAndStream
訂閱時會發射值, 以後可能會繼續發射, 可是不會中止.
...map
操做符有一些比較容易混淆的操做符:
flatMap
: 並行;switchMap
: 中斷前一個, 串行;concatMap
: 等待前一個結束, 串行;SOLID是軟件開發的五項原則:
SOLID (single responsibility, open-closed, Liskov substitution, interface segregation and dependency inversion).
這裏是Wiki的解釋.
這篇文章圖形化地解釋了SOLID, 配圖和例子都頗有趣.
Material Design的新工具套件和開源項目.
一個MVP庫. 比較特別的幾點:
easymvp-rx
插件後, 遵循Clean Architecture原則, 加入了domain層, 提供了UseCase的基類;一個小的工具庫, 能夠按格式顯示用戶的輸入. 好比在輸入上加括號, 每三位數字空一格之類的.
一個腳本, 同步你local Android SDK中的全部artifacts到一個remote的Maven artifact host上.
material-remixer是一個工具, 利用它能夠實時調整產品的UI參數. 目標平臺: Android, iOS和Web都能用的工具.
ConstraintLayout beta 2發佈啦, 修改了一些issues並改善了性能.
Google Play Service 9.8發佈了.
Firebase也發了新版.