Android Weekly Issue #243

February 5th, 2017

Android Weekly Issue #243

本期内容包括: ConstraintLayout的动画; 用Kotlin写测试; RxJava的练习项目; 一个库: Coordinators的介绍; 一个自动报告Google Play反馈的工具; Service的测试; 动画工具Lottie的介绍; Mutability的讨论;

Nougat的多语言支持和相关的一个有趣的case; 使用StrictMode来发现问题.

ARTICLES & TUTORIALS

Constraint Layout Animations

作者举例说明了如何在Java代码中动态地改变约束条件, 从而使ConstraintLayout中的View动起来.

Android Testing with Kotlin

如果你想逐渐地迁移代码到Kotlin, 你可以从测试开始, 这样你也不用更改产品环境的代码, 就先熟悉了Kotlin.

本篇文章详细讲了如何setup, 然后写各种测试:

JUnit测试

需要JUnit, mockito-kotlinKluent.

对于在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.

Android Weekly Notes Issue #243的更多相关文章

  1. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  2. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  3. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  6. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  7. Android Weekly Notes Issue #236

    Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...

  8. Android Weekly Notes Issue #235

    Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...

  9. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...

随机推荐

  1. 使用 Craft CMS 搭建blog模型

    原文链接:http://www.supperxin.com/Coding/Details/create-blog-using-craft-cms Craft CMS站点的搭建可以参考这篇:使用Dock ...

  2. jQuery移动端手机键盘输入车牌号代码【附加新能源车牌】

    最近在移动应用中要做到一个录取汽车牌号码的功能,在网上找了一个插件后发现没有增加新能源车牌功能, 和同事研究了一下,将其进行改造完美的实现了这个功能,这里放出该插件的源码: 原插件来自A5源码网[ht ...

  3. ASP.NET HttpContext类

      IHttpHandler 接口 定义 ASP.NET 以异步方式处理使用自定义 HTTP 处理程序的 HTTP Web 请求而实现的协定 封装http请求信息 HttpContext.Curren ...

  4. 树讲解——紧急集合(lca)

    大视野    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3067  Solved: 1365[ ...

  5. Codeforces Round #321 (Div. 2) Kefa and Park 深搜

    原题链接: 题意: 给你一棵有根树,某些节点的权值是1,其他的是0,问你从根到叶子节点的权值和不超过m的路径有多少条. 题解: 直接dfs一下就好了. 代码: #include<iostream ...

  6. python学习笔记之heapq内置模块

    heapq内置模块位于./Anaconda3/Lib/heapq.py,提供基于堆的优先排序算法 堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值.这种实现可以使用 h ...

  7. poj-3744-Scout YYF I-矩阵乘法

    f[i]=f[i-1]*p+f[i-2]*(1-p); 正好能够用矩阵加速. . . . #include<stdio.h> #include<string.h> #inclu ...

  8. pyquery库的使用

    pyquery标签选择 获取了所有的img标签(css选择器,你也可以换成不同的class和id) import requests import re from pyquery import PyQu ...

  9. java数据库连接池简单实现

    package cn.lmj.utils; import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import ...

  10. Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决)

    Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决) 在Win7/Win2008下IIS配置Asp网站启用父路径的设置方法与win2003下不同,看看下图就知道了.