Android Weekly筆記, 本期內容包括: Mockito的擴展; ConstraintLayout的鏈式約束; Kotlin的Async-Await; RxJava2.0; 屏幕旋轉導致的Activity重建; Throwable類的設計問題; Espresso測試中如何等待非同步請求返回;... ...
Android Weekly Notes Issue #230
November 6th, 2016
Android Weekly Issue #230.
Android Weekly筆記, 本期內容包括: Mockito的擴展; ConstraintLayout的鏈式約束; Kotlin的Async-Await; RxJava2.0; 屏幕旋轉導致的Activity重建; Throwable類的設計問題; Espresso測試中如何等待非同步請求返回; Kotlin的擴展和運算符重載; Android KeyStore實現用戶驗證.
代碼部分有proguard的庫, mvp的庫和WifiManager, ConfigurationManager的包裝庫.
ARTICLES & TUTORIALS
Extending Mockito
這篇文章講瞭如何擴展Mockito, 簡化對參數的驗證.
首先作者舉了之前驗證參數的例子, 用的是ArgumentCaptor, 寫起來很麻煩, 用了自定義的matcher之後簡化了很多.
ConstraintLayout Chains – Part 2
上一篇文章講過在ConstraintLayout中如何創建對稱的鏈式約束, 本篇文章介紹chainStyle的不同設置和比較.
預設的spread chain: 均勻分佈;
inside spread chain: 邊緣元素頂邊, 中間均勻分佈.
如果指定了權重, 將會按照權重佈局. 那麼spread chain和inside spread chain就沒有區別了.
packed chain: 預設會把所有元素都放在一起放在中間, 可以指定bias來定義偏移基準, 預設bias是0.5, bias設置為0.25的意思就是往左偏.
A glimpse of Async-Await on Android
Kotlin 1.1推出了coroutines, 這是一個讓計算可以在某個點暫停然後之後又恢復的功能, 例子是幾年前C#的Async-Await.
作者先舉例說明瞭非同步操作的幾種常見實現, 最後結合自己的庫用Async-Await做了一個例子.
What's different in 2.0
RxJava2.0.0已經發佈了. 這是它的wiki page來介紹2.0有什麼不同.
Activity Revival and the case of the Rotating Device
本篇文章講configuration變化(比如屏幕旋轉)導致的Activity重建.
為什麼configuration變化的時候要重建Activity呢? 因為系統想要儘力地做一些helpful的事情, 希望在這種時候能重新載入正確的資源.
怎麼處理呢?
方法一: 讓系統自動處理. 在屏幕旋轉時, onSaveInstanceState()
會在Activity銷毀前調用, 可以存儲一些狀態, 之後重建的時候從bundle中拿出來恢復.
方法二: 自己處理. 如果你想要獲取更多控制, 那麼你可以在manifest中聲明configChanges
類型, 然後在Activity中覆寫onConfigurationChanged()
方法, 來自己做處理.
另外文章中還討論了網路請求, 屏幕方向設置, retained fragment的使用等.
RxJava and Retrofit Throwing a Tantrum
作者討論了他們在項目中遇到的一個問題.
他們用RxJavaHooks.enableAssemblyTracking();
來收集RxJava崩潰棧信息, 可以顯示出到底是哪一個Observable崩了.
使用這個工具以後發現了一個問題, 進而研究了JDK的Throwable
類.
原來cause不存在(this)和cause未知(null)是兩種不同的情況, 但是Throwable
的getCause()
方法都會返回null.
Retrofitting Espresso
用Espresso做測試, 如何等待網路請求結束再驗證UI.
Composing functions in Kotlin with extensions and operators
K結合otlin的extensions和operator overloading功能, 改善function, 讓代碼變得更優雅.
Authentication sucks. Bad security too
一個例子, 說明為什麼老的驗證方法用戶體驗不好, 我們如何在仍然考慮用戶安全的情況下進行改善.
解決方案是用Android 6.0推出的Android Keystore.
作者展示瞭如何實現並提供了Demo.
Design
Eight don’ts for your Material Design app
Material Design app需要避免的8個點.
LIBRARIES & CODE
Android-proguards
使用一行就可以加上所有流行庫的proguard.
Moxy
一個MVP的庫.
WiseFy
包裝了Android的WifiManager和ConnectivityManager的一個庫.
VIDEOS & PODCASTS
Droidcon NYC 2016
所有Droidcon NYC 2016的視頻資源.