天天看点

Android Weekly Notes Issue #230

Android Weekly笔记, 本期内容包括: Mockito的扩展; ConstraintLayout的链式约束; Kotlin的Async-Await; RxJava2.0; 屏幕旋转导致的Activity重建; Throwable类的设计问题; Espresso测试中如何等待异步请求返回; Kotlin的扩展和运算符重载; Android KeyStore实现用户验证.

代码部分有proguard的库, mvp的库和WifiManager, ConfigurationManager的包装库.

November 6th, 2016

Android Weekly Issue #230.

这篇文章讲了如何扩展Mockito, 简化对参数的验证.

首先作者举了之前验证参数的例子, 用的是ArgumentCaptor, 写起来很麻烦, 用了自定义的matcher之后简化了很多.

上一篇文章讲过在ConstraintLayout中如何创建对称的链式约束, 本篇文章介绍chainStyle的不同设置和比较.

默认的spread chain: 均匀分布;

inside spread chain: 边缘元素顶边, 中间均匀分布.

如果指定了权重, 将会按照权重布局. 那么spread chain和inside spread chain就没有区别了.

packed chain: 默认会把所有元素都放在一起放在中间, 可以指定bias来定义偏移基准, 默认bias是0.5, bias设置为0.25的意思就是往左偏.

Kotlin 1.1推出了coroutines, 这是一个让计算可以在某个点暂停然后之后又恢复的功能, 例子是几年前C#的Async-Await.

作者先举例说明了异步操作的几种常见实现, 最后结合自己的库用Async-Await做了一个例子.

RxJava2.0.0已经发布了. 这是它的wiki page来介绍2.0有什么不同.

本篇文章讲configuration变化(比如屏幕旋转)导致的Activity重建.

为什么configuration变化的时候要重建Activity呢? 因为系统想要尽力地做一些helpful的事情, 希望在这种时候能重新加载正确的资源.

怎么处理呢?

方法一: 让系统自动处理. 在屏幕旋转时, <code>onSaveInstanceState()</code>会在Activity销毁前调用, 可以存储一些状态, 之后重建的时候从bundle中拿出来恢复.

方法二: 自己处理. 如果你想要获取更多控制, 那么你可以在manifest中声明<code>configChanges</code>类型, 然后在Activity中覆写<code>onConfigurationChanged()</code>方法, 来自己做处理.

另外文章中还讨论了网络请求, 屏幕方向设置, retained fragment的使用等.

作者讨论了他们在项目中遇到的一个问题.

他们用<code>RxJavaHooks.enableAssemblyTracking();</code>来收集RxJava崩溃栈信息, 可以显示出到底是哪一个Observable崩了.

使用这个工具以后发现了一个问题, 进而研究了JDK的<code>Throwable</code>类.

原来cause不存在(this)和cause未知(null)是两种不同的情况, 但是<code>Throwable</code>的<code>getCause()</code>方法都会返回null.

用Espresso做测试, 如何等待网络请求结束再验证UI.

结合Kotlin的extensions和operator overloading功能, 改善function, 让代码变得更优雅.

一个例子, 说明为什么老的验证方法用户体验不好, 我们如何在仍然考虑用户安全的情况下进行改善.

解决方案是用Android 6.0推出的Android Keystore.

作者展示了如何实现并提供了Demo.

Material Design app需要避免的8个点.

使用一行就可以加上所有流行库的proguard.

一个MVP的库.

包装了Android的WifiManager和ConnectivityManager的一个库.

Droidcon NYC 2016

所有Droidcon NYC 2016的视频资源.

作者: 圣骑士Wind

出处: 博客园: 圣骑士Wind

Github: https://github.com/mengdd

微信公众号: 圣骑士Wind

Android Weekly Notes Issue #230