August 21st, 2016
Android Weekly Issue #219html
Bottom Sheet是一個從底部滑上來的組件, 關於這個Google Material Design有相關的guidelines.
這篇文章主要講了基本使用, 比較簡單.java
這裏私心推薦一下我本身的repo和另外一個我以爲很好的教程:
AndroidDesignWidgetsSample
CodePath-handling-scrolls-with-CoordinatorLayoutandroid
Android平臺的依賴注入.
文章開始講了下依賴注入的概念, 當前在Android上的依賴注入最著名的是Dagger2.
而後文章講了如何set up dagger 2, 舉了個例子, 寫Module, Component, 而後使用.git
這裏再私心推薦一下我本身的一篇教程:
Using Dagger2 in Androidgithub
做者在Reddit上看到了這麼一句話:
ADB is a shell that you get on a PC with the same permissions as if you were to run a shell/terminal app on the phone itself.
因而就寫了這篇文章來討論一下shell命令的權限問題, 關於系統底層的權限如何工做.
做者在裏面提到了這本書Android Security Internals: An In-Depth Guide to Android's Security Architecture.
關於Android安全方面的研究, 做者還建了一個repo: Android-Security-Reference, 裏面是關於安全問題的各類notes, still WIP.golang
這是關於Kotlin的系列文章之part 1, part 2的文章在這裏Kotlin: The Good, The Bad, and The Ugly, 討論Kotlin的語言設計.
本篇文章講什麼呢?
做者是一個應用的leader engineer, 學習了幾天Kotlin以後, 以爲能夠解決Java存在的一些痛點, 因而把應用改成用Kotlin了, 這篇文章是在此過程當中的一些想法.shell
方法數問題: 由於dex對方法數有要求, 不能超過64k, 見這裏:multidex, 做者用了這個工具來統計方法數dexcount-gradle-plugin. 最後證實遷移到Kotlin以後, 代碼行數減小了30%, 方法數減小了10%.數據庫
Retrolambda: 原本Retrolamda會生成匿名類, 並加上一些方法. Kotlin有內置的方法(apply), lamda能夠直接傳入, 不用生成匿名類, 不用添加額外的方法.express
Guava: Guava的功能已經被Kotlin的標準庫覆蓋, 做者舉例了Guava中的ComparisonChains
, Optional
, lazy fields和Preconditions
等, 均有對應的Kotlin方法.安全
ButterKnife: ButterKnife仍然可使用, 可是Kotlin Android Extensions提供了更加天然的方式來訪問綁定的views. 還有其餘的方案好比Kotterknife和Anko, 可是這倆都各自有些缺點, 不如Kotlin Android Extensions好用.
RxJava: RxJava仍然是很好的, 可是因爲對集合並無函數式的方法, 因此有時候會用Kotlin替代一下.
Kotlin的一個優點就是它和Java能夠互相調用, 因此能夠逐步改動.
Intellij有自動把Java轉化爲Kotlin的功能, 可是有時候會有錯.
做者推薦了學習Kotlin的資源:Reference.
最後鼓勵你們使用Kotlin, 由於它如今已經足夠成熟了.
做者有一個repo: android-priority-jobqueue, 是爲Android寫的任務隊列管理framework, 用於調度管理後臺任務.
後來Android本身也加了這個類JobScheduler.
最近做者重寫了這個庫, 改善了穩定性並加了new features, 發了V2版, 而後寫個文章分享一下心得:
Trello Android以前的數據庫升級方式至關簡單粗暴, 他們drop整個數據庫, 從新建立, 而後用server上的數據填進來.
這樣在之前是沒有問題的, 由於Trello的每個操做都會當即發送給server, 不支持離線操做, 因此server上的數據永遠是最新的.
可是最近他們想支持離線工做了, 這就說明不能簡單地刪數據庫了, 由於其中可能含有沒有發給服務器的離線數據.
他們要升級數據庫, 這篇文章講了他們的升級策略和他們爲數據庫升級而寫的測試.
這個連接點進去是Twitter.
在新的support庫升級(August 2016, v24.2.0)Support Library Revision History中, TextInputLayout增長了密碼可見的toggle. Nick Butcher決定給按鈕和文字的改變都加上動畫.
這是他的repo: plaid.
團隊工做中, 有統一的代碼風格很重要, 代碼風格主要是代碼的可讀性和一致性相關問題.
做者他們爲本身的Android App歸檔了新的code style: project style guidelines, 固然啦, 文檔是在使用中不斷成長的.
作這種事主要目標是如下幾個點: 一致性, 可讀性, 可維護性, 易於瀏覽查詢, 有意義.
文檔寫得很詳細, 涉及到各個方面, 值得一看.
關於Dagger 2裏面自定義scope, 做者以前有一篇文章Dependency injection with Dagger 2 - Custom scopes, 本篇文章繼續了這個話題.
所謂scope呢, 就是限制了單例的生存週期, 有些單例可能在整個應用生命週期都存在, 另外一些單例可能只須要存在必定的時間. Dagger 2默認只提供了一個scope @Singleton, 因此咱們要根據須要自定義本身的scope.
做者的例子中定義了@UserScope, 以實例說明了他的實現, 還討論了UserScope的狀態恢復問題.
例子代碼: Dagger2Recipes-UserScope
Java 8的一個重要特性是加入了Lambda表達式.
Lambda表達式的語法:
TextView textView = (TextView) findViewById(R.id.text_view); textView.setOnLongClickListener(v -> System.out.println("Long Click"));
->
{}
包起來.在Android中使用Lambda表達式:
須要改build.gradle:
android { ... defaultConfig { ... jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
還有另外一種方式是使用RetroLambda plugin: gradle-retrolambda
這篇文章講了做者做爲一個新手, 第一次開發Wear應用的時候遇到的種種問題.
好比, 手錶和手機是須要配對的, 在手機上安裝Google的這個軟件, 才能和手錶配對, 配對了以後, 給手機安裝release版apk的時候就會自動給手錶安裝應用.
也能夠在Android Studio中選擇wear來單跑Wear應用安裝到手錶, 可是隻有配對了才能和手機有通訊.
使用Wear的模擬器, 還須要運行這個命令adb -d forward tcp:5601 tcp:5601來和鏈接到電腦的手機鏈接.
還有在傳輸Assets時, 做者按照官方文檔的例子, 卻遇到了一些方法不能在UI線程調用的問題, 後來也解決了.
做者講了如何實現Firebase的Remote config.
Remote config可使咱們控制應用的更新, 而不用從新發佈一個版本.
爲何要使用遠程配置呢? 主要的緣由是測試新的功能, 而後能夠根據用戶的反饋快速地作出響應, 把更好的行爲呈現給用戶. 簡單來講就是作A/B Test.
Firebase的remote config很強大, 指定參數後能夠指定應用條件, 包括國家, 系統, 應用版本, 隨機等等.
2016年8月新發布的Material design包括瞭如下更新:
Notifications, Widgets, 確認操做和操做後的提示.
比較重要的更新是:
Navigation如今包括瞭如何使用Up和Back button.
還有使用全屏模式的三種模式:Lean back, Immersive, Lights Out以及它們相應的交互行爲.
AutoValue的擴展, 用來建立Firebase的數據庫對象.
AutoValue是google的一個庫. 用來建立interchangeable的對象, 即若是兩個對象的全部fields是相等的, 咱們認爲這兩個對象相等.
基於註解的一個工具, 用來保存和恢復實例的狀態.
感受跟Icepick同樣.
一個自定義的TextView, 能夠指定按照文字長度或者行數截取顯示, 帶展開和關閉按鈕操做.
一個爲Android寫的後臺任務隊列管理程序.
Android Support Library 24.2.0發佈啦(August 2016).
v4被分紅了不少小模塊.
API更新:
Custom Tabs能夠控制instant app是否打開.
TextInputLayout加了密碼可見的toggle.
Transition兼容到API 14及其以上.
Custom Tabs support library支持給secondary toolbar用RemoteViews.
AppCompatResources加了能夠經過getDrawable()方法, 以resource id加載
CoordinatorLayout如今支持定義inset views, 而後指定其餘Views給其讓路. 就是當Snackbar出現的時候, FloatingActionButton躲開的那種行爲, 只不過如今給任意的child view均可以設置了.
DiffUtil類能夠計算出兩個集合的不一樣, 而後得出一個更新操做的list, 能夠交給RecyclerView.Adapter.
新增了RecyclerView.OnFlingListener. 有SnapHelper和LinearSnapHelper可供選擇使用.
行爲改變:
day/night模式改變的時候, activity將會自動重啓.
若是status bar是透明的, Snacker如今會在navigation bar後面繪製.
其餘還有一些deprecations和bug fixes.