Android Weekly Notes Issue #237

Android Weekly Issue #237

December 25th, 2016
Android Weekly Issue #237
這是本年的最后一篇issue, 感謝大家.
本期內容包括: ConstraintLayout的使用; Android Things的應用; 如何利用第三方庫使得Java具有Kotlin的一些新特性; Firebase是如何利用ContentProvider進行初始化的; Kotlin上的并發處理; 其他還有一些關于程序架構, 代碼優化相關的討論.

ARTICLES & TUTORIALS

Building interfaces with ConstraintLayout

本文介紹ConstraintLayout的chains和ratios. 另外還提到很多使用ConstraintLayout的實現細節.

所謂chains就是幾個View之間建立的雙向約束.

ratios是幫助你設置View的寬高比, 它所做的事情和PercentFrameLayout差不多, 但是不用添加額外的ViewGroup.

Electronic Candle using Android Things

用ObjectAnimator和Android Things搭建的一個電子蠟燭.

ExoPlayer 2.1 - What’s new

ExoPlayer 2.1有什么新功能.
這是他們的release notes.

Living (Android) without Kotlin

如果你因為種種原因不能在項目中使用kotlin, 這篇文章告訴你如何借助于一些工具和庫用Java實現Kotlin的一些features.

Christmas Voice – Part 1

作者發布了一個改變聲音的應用, 并且將其開源了: ChristmasVoice.

How does Firebase initialize on Android?

Firebase在Android上是如何初始化的?

很多SDK在初始化的時候會要求應用傳入Context. Firebase簡化了這一步驟. 解決方案就是用了ContentProvider, 既解決了時間問題, 也得到了sdk需要的Context. 并且不需要應用的開發者添加任何額外的初始化代碼.

選擇ContentProvider主要有兩點原因:

  • ContentProvider初始化早.
    當一個Android進程啟動的時候, 首先會初始化每一個ContentProvider, 然后是Application, 最后是被Intent啟動的組件.

在ContentProvider初始化的時候, 就可以拿到Context了.

  • ContentProvider可以merge到最終的manifest里.
    Manifest merge是在build的時候來定義你的應用最終的manifest. 最終的manifest會包含所有依賴的庫的manifest中聲明的組件.

如果你也想選擇用ContentProvider來做應用或庫的初始化, 請注意authority的唯一性問題和ContentProvider只在主進程運行的問題.

Seductive Code

當我們在改善代碼可讀性的時候, 很有可能會影響到性能和可維護性.

作者舉例說明了他在實際編程中遇到的幾個問題.

Testing Android Things – Unit & Vendor tests

如何開發Android Things應用, 才能讓測試更加容易. 本文以一個很小的LED燈閃爍程序為例.

Engineering the Architecture Behind Uber’s New Rider App

Uber團隊重新打造了他們的ride app, 提出了一個新的構架模式: Riblets.

關于架構的選型, 已有的類型可以查看這個iOS Architecture Patterns.

Rebuilding the Buffer Android Composer

作者重構了自己應用的代碼, 應用了clean architecture, 本文講述了其過程.

Papercut

Papercut是一個庫, 用來標記那些我們覺得需要刪除或者需要重構的代碼.

Concurrency Primitives in Kotlin

作者最近看了一本書, 講Android的并發, 覺得很好, 想要用Kotlin來重寫書中的例子, 結果發現:

  • Kotlin中沒有synchronized關鍵字.
  • Kotlin中沒有volatile關鍵字.
  • Kotlin中的Any, 類比于Java中的Object, 但是卻沒有wait(), notify()notifyAll()方法.

所以Kotlin中的并發是怎么處理呢? 這里有個問題: Kotlin forum, Kotlin語言的開發人員表示這些應該由庫來處理, 而不是語言本身.

盡管Kotlin不支持, 但是它還是提供了一些底層的并發工具.

  • 創建線程. 因為Kotlin可以調用Java代碼, 所以仍然可以通過兩種方法來創建線程.
  • @Synchronized注解和synchronized()方法.
  • @Volatile注解.
  • 沒有wait(), notify()notifyAll()方法, 但是可以把Object對象作為鎖, 然后調用鎖的這些方法.

stackoverflow上有一個相關問題, 答案很不錯, 列了處理并發的一些有用的庫.

LIBRARIES & CODE

KataScreenshotAndroid

一個Screen Kata應用, 用來練習做UI測試的.

Papercut

一個用來標記需要重構或者移除代碼的工具庫.

Squint

一個可以自定義的對角線切割View.

Colorful

一個動態的主題庫, 讓你可以方便地修改應用的顏色.

scytale

包裝了JCA API和AndroidKeyStore API, 讓創建, 加密和管理任何Android API的keys變得更容易.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容