Android Weekly Notes Issue #229
Android Weekly Issue #229
October 30th, 2016
Android Weekly Issue #229
Android Weekly筆記, 本期內容包括: 效能庫Pury的外掛化; 一種新的多選設計和實現; 音訊播放; Dagger的測試mock方案; ConstraintLayout的鏈式約束; Mobile Vision API的二維碼掃描功能; RxJava的使用缺陷討論; SOLID原則圖解.
ARTICLES & TUTORIALS
Pury是一個做profile的工具, 前面有過一篇文章介紹: Pury.
本文是作者的另一篇文章, 講Pury的外掛化和擴充套件.
另外, 作者最近正在整合Google Analytics到Pury中.
在移動應用上的多選設計很難, 通常不是很靈活, 用起來也不舒服.
本文推薦了一種全新的多選設計: 把螢幕分為兩部分: 包括主要的列表和選中列表. 選中的專案自動移動到選中列表中去.
這個設計概念的實現: ViewPager
+ 兩個RecyclerView
.
作者選用了kotlin來實現. 列舉了幾個kotlin的features: Extension functions, Null safety, Collections, Better syntax.
本文中還介紹瞭如何使用這個庫.
關於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.
大多數Rx相關的文章都說優點, 本篇不同, 作者分享了在使用RxJava過程中碰到的一些煩人的事情.
不過儘管有這些挫折, RxJava仍然是一個很棒的工具.
文件
RxJava的文件有時候對初學者來說會很具迷惑性.
推薦看: RxMarbles, 有操作符圖解.
匿名類
RxJava的使用中會構建很多匿名類.
推薦使用: Retrolambda, Kotlin, 或Jack.
忘記subscribe
這是一個常見的錯誤, 如果只寫好了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, 配圖和例子都很有趣.
DESIGN
Material Design的新工具套件和開源專案.
LIBRARIES & CODE
一個MVP庫. 比較特別的幾點:
- 使用註解來注入Presenter(可以和Dagger2結合使用, 否則只能注入無參構造), 繫結Presenter和View的生命週期;
- 使用Loaders來字啊configurations changes時儲存Presenter;
- 加上
easymvp-rx
外掛後, 遵循Clean Architecture原則, 加入了domain層, 提供了UseCase的基類;
一個小的工具庫, 可以按格式顯示使用者的輸入. 比如在輸入上加括號, 每三位數字空一格之類的.
一個指令碼, 同步你local Android SDK中的所有artifacts到一個remote的Maven artifact host上.
material-remixer是一個工具, 利用它可以實時調整產品的UI引數. 目標平臺: Android, iOS和Web都能用的工具.
News
ConstraintLayout beta 2釋出啦, 修改了一些issues並改善了效能.
Google Play Service 9.8釋出了.
Firebase也發了新版.