天天看點

Android Weekly Notes Issue #243

本期内容包括: ConstraintLayout的動畫; 用Kotlin寫測試; RxJava的練習項目; 一個庫: Coordinators的介紹; 一個自動報告Google Play回報的工具; Service的測試; 動畫工具Lottie的介紹; Mutability的讨論;

Nougat的多語言支援和相關的一個有趣的case; 使用StrictMode來發現問題.

Android Weekly Issue #243

February 5th, 2017

ARTICLES & TUTORIALS

Constraint Layout Animations

作者舉例說明了如何在Java代碼中動态地改變限制條件, 進而使

ConstraintLayout

中的View動起來.

Android Testing with Kotlin

如果你想逐漸地遷移代碼到Kotlin, 你可以從測試開始, 這樣你也不用更改産品環境的代碼, 就先熟悉了Kotlin.

本篇文章詳細講了如何setup, 然後寫各種測試:

JUnit測試

需要JUnit, mockito-kotlin和Kluent.

對于在

setUp()

方法中初始化的變量, 需要标記為

lateinit

.

Robolectric測試

作者封裝了一個基類, 把所有Mockito相關的東東包裝在裡面. 這樣在Mockito更新的時候不用更改每一個測試檔案.

Espresso測試

同樣, 這裡作者也建立了幾個基類, 将所有Espresso相關的東東包裝起來.

Practical challenges for RxJava learners

作者建議通過實踐來檢驗和學習RxJava技能, 之前他用過這個Repo: Intro-To-RxJava, 現在他又新推出了這個Repo, 針對RxJava2的.

Coordinators: solving a problem you didn’t even know you had

Square釋出了一個庫叫coordinators, 這個庫是用來分離View中的一些控制邏輯.

Review-Reporter: Part 1

作者他們做了一個小項目: Review-Reporter, 可以自動把Google Play上新的使用者回複發到slack, firebase, Jira上. 本篇文章講了他們是怎麼做的.

How to test a Service

Android官方文檔介紹了如何測試Service: Testing your Service. 本文作者介紹他是如何做的.

Introducing Lottie

Lottie是一個iOS, Android和React Native的庫, 可以實時渲染After Effects的動畫, 讓native的應用像使用靜态檔案一樣簡單地使用複雜的動畫.

Learning to use and abuse Mutability

An immutable class is a class whose state cannot be changed once it has been created.

這篇文章分享了作者關于Java中的mutability & immutability的一些想法.

A Curious Case of Multiple Locales

Android N的一個新feature就是可以在設定中選擇多種語言.

比如一個使用者, 她會說意大利語和德語, 她使用的是一個低于Android 7的手機, 她把手機語言設定為意大利語.

有一個app, 支援兩種語言, 預設是英語, 然後還支援德語.

但是這個應用在這個使用者的手機上打開時, 發現自己并不支援意大利語, 于是會顯示英語(預設)而不是德語, 因為應用又不知道這個使用者還會德語.

後來使用者把手機更新了, 用了Android 7的系統, 她發現可以設定支援多種語言, 于是, 于是她設定了兩種語言, 意大利語和德語. 在新手機上裝之前那個app的時候發現現在顯示的是德語.

因為應用現在知道了使用者還會講德語.

現在, 假設我們需要進行向下相容以前的舊版本裝置, 我們加入了

appcompat-v7

, 使用者更新後, 英語又出現了.

這是因為

appcompat-v7

中含有一些意大利語的資源, 因為所有的資源在build的時候都會merge到一起, 是以現在app也包含了這些資源. 系統認為現在app能夠支援使用者的第一語言了, 然後就查找對應的資源, 當然沒查找到, 于是就使用了預設資源, 也就是英語.

我們有什麼辦法可以解決這個問題呢? 答案是這樣:

defaultConfig {  
  ...

  resConfigs "en", "de"
}
           

這樣就告訴了Gradle我們隻支援這兩種語言, 所有其他的資源都不會被打包進來.

驗證的方法是使用Android Studio的

Analyze APK

來檢視string有多少種configurations.

Use StrictMode To Find Things You Did By Accident

StrictMode

是一個開發工具, 用于發現一些問題, 好讓你來修複它們.

一個常用的情景是用來捕捉主線程的IO操作, 避免ANR彈框.

如何使用呢? 很簡單, 隻需要在應用啟動時初始化一下, 可以是你的Application, Activity或其他元件的

onCreate()

方法:

public void onCreate () {
    if (DEVELOPER_MODE) {
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()   // or .detectAll() for all detectable problems
                .penaltyLog()
                .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects()
                .detectLeakedClosableObjects()
                .penaltyLog()
                .penaltyDeath()
                .build());
    }
    super.onCreate();
}
           

你可以決定檢測到問題時要發生什麼, 比如:

  • penaltyDeath()

    : 整個程序崩潰.
  • penaltyDialog()

    : 顯示Dialog.
  • penaltyLog()

    : 顯示log.

更多的處理見: StrictMode.ThreadPolicy.Builder.

StrictMode文檔: StrictMode.

LIBRARIES & CODE

android-material-stepper

一個Material steppers的庫, 類似于配合ViewPager使用的indicators.

AOSP Support Library Contribution Guide

Google開放了對support library的bug修改和文檔更新.

sqlite-android

一個Android的SQLite庫, 包含了最新的SQLite版本.

Review-Reporter

Google Play回報的自動提示, 支援提示到Slack和Jira.

SimpleRecyclerView

更簡單好用的RecyclerView.

作者: 聖騎士Wind

出處: 部落格園: 聖騎士Wind

Github: https://github.com/mengdd

微信公衆号: 聖騎士Wind

Android Weekly Notes Issue #243