Android Weekly Issue #238
January 1st, 2017
Android Weekly Issue #238
本期內(nèi)容包括: Firebase發(fā)送Notification; RecyclerView的預(yù)取; 后臺工作的實(shí)現(xiàn)方式討論; RecyclerView分組數(shù)據(jù); 跨平臺應(yīng)用工具Flutter介紹; Gradle依賴管理;
寫測試的一些注意事項(xiàng); Android Things應(yīng)用搭建及一些思考; 如何搭建CI等.
ARTICLES & TUTORIALS
Mastering Firebase Notifications
用Firebase發(fā)通知:
- Console Notifications.
- 使用命令行, 發(fā)送curl命令.
-
FirebaseMessagingService
在應(yīng)用前臺的時候處理通知. - 如果應(yīng)用前后臺的時候都需要處理, 則發(fā)送data而不是notification.
官方文檔Firebase cloud-messaging.
RecyclerView Prefetch
作者研究了RecyclerView的渲染時間, 發(fā)現(xiàn)在滾動的時候很多的時間會花在新item的創(chuàng)建和bind上, 這樣會推遲UI線程的其他工作, 還有RenderThread的后續(xù)工作, 如果超出了frame boundary, 就有可能會造成明顯的卡頓.
而同時前一幀, UI線程可能處于空閑狀態(tài).
那么我們有沒有可能以一種預(yù)取的方式, 把即將出現(xiàn)的View在提前的空閑階段準(zhǔn)備好呢?
pre-fetch的優(yōu)化已經(jīng)在Support Library v25加入, v25.1.0有進(jìn)一步的加強(qiáng). 如果你沒有自定義LayoutManager, 也沒有嵌套RecyclerView
, 那么你升級support library之后就自動獲得了這項(xiàng)優(yōu)化. 其他兩種情況你還需要調(diào)用一些方法.
你可以設(shè)置LayoutManager.setItemPrefetchEnabled()
來對比開啟和關(guān)閉預(yù)取功能前后的不同. 性能測量用Systrace和GPU profiling.
Things to consider before running background tasks
完成后臺任務(wù)的幾種方式和各自的優(yōu)缺點(diǎn)分析.
- Thread.
- AsyncTask.
- Service.
- IntentService.
- Loader.
- JobService and JobScheduler. GCM Network Manager.
- RxJava.
Android RecyclerView - Grouping Data
作者展示了如何將RecyclerView中的數(shù)據(jù)分組展示, 在他的例子中是按照時間分組, 每一組開始是該組的時間占據(jù)一行.
其實(shí)主要是前期的數(shù)據(jù)處理, 首先創(chuàng)建一個HashMap, 分組依據(jù)作為key, 符合該依據(jù)的數(shù)據(jù)作為值存在對應(yīng)key的value list里; 然后給日期和數(shù)據(jù)創(chuàng)建一個共同的基類, 把HashMap再重新展開成一個List, 里面穿插好數(shù)據(jù). 最后用RecyclerView按照數(shù)據(jù)類型不同顯示兩種布局.
Flutter Intro
Flutter是一個Google推出的新工具, 用來構(gòu)建跨平臺的應(yīng)用.
本文介紹了如何setup和創(chuàng)建一個Hello World.
How to add Gradle dependencies using ‘foreach’
一種管理依賴的方式, 把所有的依賴定義在同一個文件的不同分組里, 然后在每個module各自添加自己的分組即可.
Best practices to improve app engagement
如何提高app的用戶參與度.
The Do’s and Don’ts of Writing Test cases in Android
作者分享了在寫測試的時候需要注意的幾點(diǎn):
- 首先明確我們要測試的是什么, 預(yù)先條件是否滿足, 如果是因?yàn)榍爸脳l件不滿足, 那么并不是我們的測試本身失敗了.
- 每個測試都是獨(dú)立完成的, 測試的執(zhí)行順序不應(yīng)該影響結(jié)果.
- 在測試中不要寫條件語句. 條件語句是在實(shí)際代碼中的, 每一個條件都應(yīng)該對應(yīng)一個單獨(dú)的測試case.
- 測試應(yīng)該不受外部因素影響, 比如server和網(wǎng)絡(luò). 因?yàn)槿绻驗(yàn)檫@類原因測試失敗了, 并不代表我們的代碼有bug.
Making Rainbow HAT Work with the Android Things
一個Android Things應(yīng)用.
Christmas Voice – Part 2
一個小應(yīng)用, 錄音, 做轉(zhuǎn)換并播放.
Will Android do for the IoT what it did for mobile?
關(guān)于Android Things的一些看法.
Set up a CI server for Android dev
如何搭建Android項(xiàng)目的CI, (Ubuntu + Jenkins + SonarQube).
DESIGN
Material: Growth & communications
如何進(jìn)行用戶引導(dǎo), feature發(fā)現(xiàn)和手勢教育.
LIBRARIES & CODE
PanoramaImageView
一個ImageView, 在設(shè)備轉(zhuǎn)動的時候可以自動滾動內(nèi)容.
TextDecorator
可以給文字分段加上各種裝飾, 下劃線, 點(diǎn)擊事件等.
Delightful-SQLBrite
一個示例應(yīng)用, 展示SQLDelight和SQLBrite結(jié)合使用.
mainframer
一個遠(yuǎn)程build的腳本.
material-about-library
創(chuàng)建一個Material風(fēng)格about頁面的庫.
android-snowfall
下雪View.
Android-ExpandIcon
展開/合上的上下箭頭icon, 支持點(diǎn)擊和手勢滑動切換.
RxAnimations
Rx形式的動畫庫.