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