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. 可能是全网最详细的express--middleware

    写在前面 hello,小伙伴们,我是你们的pubdreamcc,本篇博文出至于我的GitHub仓库node学习教程资料,欢迎小伙伴们点赞和star,你们的点赞是我持续更新的动力. GitHub仓库地址 ...

  2. CDOJ 1171 两句话题意

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1171 题解: 这道题应该从gcd出来的值入手. 我们要求所有子集的gcd的和 首先我们先统计一下每个数字出现 ...

  3. CDOJ 92 Journey LCA乱搞

    原题链接:http://acm.uestc.edu.cn/#/problem/show/92 题意: 给你一棵树,然后在树上连接一条边.现在有若干次询问,每次问你两个点(u,v)之间的距离在加那条边之 ...

  4. 转: Android开发的网络抓包

    方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包记录到本地,再把抓到的.cap文件导到pc上面用wireshark来分析.这里步骤非常多,在和后台联调的时候,这个效率是非常低 ...

  5. 关于JavaScript禁止点击事件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. SQL中Inserted 和Deleted表 以及触发Trigger

    什么是Inserted 和Deleted表 他们有什么用 trigger 的简单实用 1.什么是Inserted 和Deleted表 当插入数据的时候,其实是同时向目的表 和inserted表中插入数 ...

  7. odoo 有哪些文档资源

    // openbook [覆盖 openerp 7 及之前版本] https://doc.odoo.com/     // 最新的 odoo documentation user[覆盖 odoo 9] ...

  8. C# SQL 整表插入

    说明: (1)表A的一部分数据插入到表B (2)DataAccess 类,是放在DAL层下的底层类; da.StrConnection 写在DataAccess类中; //整表插入方法 private ...

  9. Something about cache

    http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter5/5.5.htm 5.5 高速缓冲存储器cache 随着CPU时钟速率的不 ...

  10. 如何将安卓手机中已安装的应用导出一个apk安装包

    首先安装ES文件浏览器 然后应用里找到你要导出apk的应用,长按应用,备份应用, 然后在upbacks/apps文件夹里找吧 不得不说 ES浏览器还是屌啊