1. 程式人生 > >Android Weekly Notes Issue #229

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也發了新版.