Android Weekly Issue #250
March 26th, 2017
Android Weekly Issue #250.
本期內(nèi)容: 好幾篇關(guān)于Android O預(yù)覽版的文章; JUnit 5的動態(tài)測試; 作為團(tuán)隊(duì)里唯一的Android開發(fā)如何學(xué)習(xí)和工作; Support庫新推出的基于物理的動畫API: SpringAnimation; Uber Rider項(xiàng)目重構(gòu)中關(guān)于依賴注入的scope層級的改動; Kotlin和RxJava的簡潔性.
ARTICLES & TUTORIALS
O-h yeah! What we look forward to in Android O
Google宣布了最新Android O的預(yù)覽程序. Novoda team查看了最新文檔來看看什么新特性最讓大家欣喜.
- 更寬廣的色域和多種顏色空間支持:
我們不再被限制在sRGB的顏色空間里, 文檔見ColorSpace. - 字體支持.
- Adaptive icons: Android N中提供了圓形的啟動圖標(biāo); 從Android O開始, 手機(jī)開發(fā)商和launcher開發(fā)者們可以指定一個(gè)mask到應(yīng)用提供的背景圖上.
- ACCESSIBILITY按鈕: Accessibility services(比如TalkBack)可以在有軟導(dǎo)航鍵的設(shè)備上添加一個(gè)按鈕.
- 指紋手勢.
- 自動大小的TextView.
- Autofill APIs. 自動填表.
JUnit 5: Dynamic Tests
本篇講如何簡化一個(gè)測試cases都很類似的test suite.
首先, 找出不同的部分, 抽取一個(gè)方法, 把不相同的部分作為參數(shù)傳進(jìn)去.
然后用JUnit 5的動態(tài)測試(Dynamic Tests)特性.
兩個(gè)關(guān)鍵組件: TextFactory和DynamicTest.
文中代碼詳細(xì)說明了它們的用法.
Flying Solo with Android Development
作者幾經(jīng)周轉(zhuǎn), 從4人Android團(tuán)隊(duì)到2人團(tuán)隊(duì), 現(xiàn)在又到了一個(gè)新團(tuán)隊(duì), 作為團(tuán)隊(duì)里唯一Android開發(fā). 在這篇文章中, 她分享了一些覺得不錯(cuò)的學(xué)習(xí)資源和她平時(shí)的工作習(xí)慣以及建議.
Introduction to SpringAnimation with examples
本文講彈簧效果動畫的實(shí)現(xiàn).
Dynamic-animation是Android Support Library 25.3.0最新引進(jìn)的, 用于實(shí)現(xiàn)基于物理的動畫.
作者這篇文章介紹了SpringAnimation和SpringForce的用法, 提供了幾個(gè)例子, 動態(tài)改變View的位置, 旋轉(zhuǎn)和大小屬性: android-springanimation-examples
.
Rewriting Uber Engineering’s Rider App with Deep Scope Hierarchies
Android Uber rider app的重構(gòu).
主要討論了由于存在很多共用組件, 所以依賴注入的設(shè)計(jì)需要改進(jìn).
首先介紹了舊的設(shè)計(jì): 兩級Scope層次.
后來他們的新設(shè)計(jì)采用了深層次的scope層級, 減少了耦合.
最后又介紹了幾種他們曾經(jīng)考慮過的架構(gòu)模式.
It’s time to kiss goodbye to your implicit BroadcastReceivers
Android O的preview已經(jīng)出來了: Android O Preview. 這是它列出來的Behavior changes.
如果你想要把a(bǔ)pp target到Android O, 而且你的manifest中注冊了一些隱式的BroadcastReceiver. 那么這篇文章就是為你準(zhǔn)備的.
Android做這一切的出發(fā)點(diǎn)都是為了節(jié)約電量.
Android 7.0的時(shí)候就移除了三種隱式廣播的支持. 它們是CONNECTIVITY_ACTION, ACTION_NEW_PICTURE和ACTION_NEW_VIDEO.
現(xiàn)在Android O中, 除了background-broadcasts中提到的, 其他所有在manifest中注冊的隱式廣播都不再工作了. (注意這里的關(guān)鍵字: manifest中注冊, 隱式廣播.)
那么你的manifest中如果有receiver, 現(xiàn)在應(yīng)該怎么辦呢?
首先看看你的廣播是否是隱式的. 根據(jù)文檔, 所有跟你的應(yīng)用沒有直接關(guān)系的廣播都是隱式的; 而直接相關(guān)的都是顯式的.
然后檢查你的應(yīng)用是否真的受到了影響, 因?yàn)橛幸恍╇[式的廣播是例外情況.
真的受到影響了怎么辦呢? 使用JobScheduler來拯救. 但是它只在API 21以上有, 如果你的最低API小于21, 可以用官方推薦的firebase-jobdispatcher-android. 作者他們團(tuán)隊(duì)用的是Evernote的android-job.
如果上面的庫仍然不能幫到你, 你可以考慮把廣播換成動態(tài)注冊的.
不管你的廣播是隱式的還是顯式的, Context.registerReceiver()是永遠(yuǎn)有效的. 但缺陷就是注銷以后就不能再收到事件了.
Random Musings on the O Developer Preview 1
作者對Android O預(yù)覽的一些看法.
比較令人擔(dān)心的幾點(diǎn)
- 后臺工作的處理: 許多隱式的廣播可能不再起作用, 可能會改變某些應(yīng)用的行為.
- 多顯示支持. 允許用戶把一個(gè)activity投射到外部顯示器上. 這個(gè)行為還需要進(jìn)一步測試, 如果我們投射到一個(gè)不可觸摸的顯示器上會怎樣?
- 關(guān)于磁盤空間, 緩存目錄.
- Support Libraries支持的最小API為14.
有啟發(fā)性的幾點(diǎn)
- 可以給Notification設(shè)置timeout.
- Picture-in-Picture (PIP)模式. 一種特殊的多窗口模式, 多數(shù)被用來播放視頻, TV已經(jīng)有了.
- 新字體.
- Storage Access Framework (SAF) -> Seekable streams.
- WebView將支持allow-cleartext設(shè)置.
- 應(yīng)用安裝其他應(yīng)用需要用戶授權(quán).
- Content provider分頁查詢.
-
FragmentLifecycleCallbacks. -
SmsManager可以創(chuàng)建tokens. -
SharedPreferences提供了接口, 可以更換底層存儲實(shí)現(xiàn). -
findViewById()不再需要強(qiáng)轉(zhuǎn).
其他你可能感興趣的
-
View.setTooltipText(). -
TextView.setJustify(). - 提供了padding和margin的Vertical和Horizontal屬性, 這樣一下就可以設(shè)置同一方向上的兩個(gè)值.
-
ProgressBar.setMin(). -
ANDROID_ID現(xiàn)在是對每個(gè)應(yīng)用來說, 而不是用戶或設(shè)備. 見Privacy.
Writing Concise Code with Kotlin and RxJava
用Github API舉例子, 用RxJava和Kotlin實(shí)現(xiàn)一個(gè)功能, 說明了它們的簡潔性.
LIBRARIES & CODE
Fakeit
Kotlin版的假數(shù)據(jù)生成器.
Cicerone
一個(gè)輕量級的Android導(dǎo)航庫.
data-binding-validator
表單數(shù)據(jù)驗(yàn)證器, 使用data binding framework實(shí)現(xiàn).
LabCoat
GitLab client for Android.
NEWS
O-MG, the Developer Preview of Android O is here!
Google發(fā)布了下一個(gè)系統(tǒng)版本Android O的開發(fā)者預(yù)覽版.
TOOLS
Android Studio meets Slack
一個(gè)小工具, 可以直接把Android Studio打的包發(fā)到Slack去.