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原則圖解.html

ARTICLES & TUTORIALS

Get access to raw profiling results with plugins for Pury

Pury是一個作profile的工具, 前面有過一篇文章介紹: Pury.react

本文是做者的另外一篇文章, 講Pury的插件化和擴展.android

另外, 做者最近正在集成Google Analytics到Pury中.git

Building a Multiselection Solution for Android in Kotlin

在移動應用上的多選設計很難, 一般不是很靈活, 用起來也不舒服.github

本文推薦了一種全新的多選設計: 把屏幕分爲兩部分: 包括主要的列表和選中列表. 選中的項目自動移動到選中列表中去.api

這個設計概念的實現: ViewPager + 兩個RecyclerView.app

做者選用了kotlin來實現. 列舉了幾個kotlin的features: Extension functions, Null safety, Collections, Better syntax.dom

做者的庫: Multi-Selection.ide

本文中還介紹瞭如何使用這個庫.工具

Audio (not) playing in Android

關於Android上的音頻播放, 做者的總結文章.

音頻播放的方式有:

關於MediaPlayer的使用, 官方文檔: Media Playback, 本文中有一張圖是MediaPlayer的生命週期圖.

做者逐個列舉了實際使用這些API時可能會遇到的一些issues. 而且最終選擇的最佳解決方案是Google的ExoPlayer, 2.0版本已經解決了她以前遇到的全部issues.

Providing test doubles with Dagger 1 and Dagger 2

這篇文章講在使用Dagger1和Dagger2的項目中, 如何爲測試mock依賴.

ConstraintLayout Chains – Part 1

做者講了ConstraintLayout的一個重要特性: chains, 鏈.
chains是一個機制, 把一些獨立的Views鏈起來, 而後咱們能夠對這一個集合來採起一些行爲.

好比選中一個parent下的兩個TextView(這兩個原本是分別對齊parent的左右), 而後選擇"Center Horizontally", 就是創建了一個鏈.
在xml中實際上給這兩個view都各自加上了一條限制條件, 限制它們在對方的(左/右)邊, 這兩條對稱性的限制條件就構成了一個鏈.

這種鏈叫spread chains, 是默認的style.

Machine Learning with the Mobile Vision API — Part 2

使用Mobile Vision的Barcode API來進行二維碼檢測.
Code: barcode-detector.

Reactive Frustrations

大多數Rx相關的文章都說優勢, 本篇不一樣, 做者分享了在使用RxJava過程當中碰到的一些煩人的事情.
不過儘管有這些挫折, RxJava仍然是一個很棒的工具.

文檔

RxJava的文檔有時候對初學者來講會很具迷惑性.
推薦看: RxMarbles, 有操做符圖解.

匿名類

RxJava的使用中會構建不少匿名類.
推薦使用: Retrolambda, Kotlin, 或Jack.

忘記subscribe

這是一個常見的錯誤, 若是隻寫好了Observable但沒有觸發, 一般是沒有subscribe, 由於Observable是被動的, 只有當被訂閱的時候纔會觸發.

代碼的推理

有時候很難看見一塊代碼就知道執行結果, 必須往上游排查.

因此做者在他們的項目中規定了一項對於Observable的命名規範:
...Once表示只發射一次; ...Stream表示會發射值, 或者不發射, 可是不會completes; ...OnceAndStream訂閱時會發射值, 以後可能會繼續發射, 可是不會中止.

...map操做符

有一些比較容易混淆的操做符:

  • flatMap: 並行;
  • switchMap: 中斷前一個, 串行;
  • concatMap: 等待前一個結束, 串行;

Designing something S.O.L.I.D

SOLID是軟件開發的五項原則:

SOLID (single responsibility, open-closed, Liskov substitution, interface segregation and dependency inversion).

這裏是Wiki的解釋.

這篇文章圖形化地解釋了SOLID, 配圖和例子都頗有趣.

DESIGN

Design Is Never Done

Material Design的新工具套件和開源項目.

LIBRARIES & CODE

EasyMVP

一個MVP庫. 比較特別的幾點:

  • 使用註解來注入Presenter(能夠和Dagger2結合使用, 不然只能注入無參構造), 綁定Presenter和View的生命週期;
  • 使用Loaders來字啊configurations changes時保存Presenter;
  • 加上easymvp-rx插件後, 遵循Clean Architecture原則, 加入了domain層, 提供了UseCase的基類;

Input Mask

一個小的工具庫, 能夠按格式顯示用戶的輸入. 好比在輸入上加括號, 每三位數字空一格之類的.

sdk-artifact-sync

一個腳本, 同步你local Android SDK中的全部artifacts到一個remote的Maven artifact host上.

material-remixer

material-remixer是一個工具, 利用它能夠實時調整產品的UI參數. 目標平臺: Android, iOS和Web都能用的工具.

News

ConstraintLayout beta 2 is now available

ConstraintLayout beta 2發佈啦, 修改了一些issues並改善了性能.

Google Play Services Release Notes

Google Play Service 9.8發佈了.

Some new Firebase libraries

Firebase也發了新版.

相關文章
相關標籤/搜索