Android Weekly Notes Issue #243
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-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.
Android Weekly Notes Issue #243的更多相关文章
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- Android Weekly Notes Issue #236
Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...
- Android Weekly Notes Issue #235
Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...
- Android Weekly Notes Issue #234
Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...
随机推荐
- windows命令行更改IP地址
修改IP地址时,提示出现一个意外情况 netsh interface ip set address "以太网" static 192.168.3.151 255.255.255.0 ...
- 空间划分的数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)
目录 网格 (Grid) 网格的应用 四叉树/八叉树 (Quadtree/Octree) 四叉树/八叉树的应用 BSP树 (Binary Space Partitioning Tree) 判断点在平面 ...
- BZOJ1009GT考试 DP + KMP + 矩陣快速冪
@[DP, KMP, 矩陣快速冪] Description 阿申准备报名参加GT考试,准考证号为\(N\)位数\(X_1 X_2 .. X_n(0 <= X_i <= 9)\),他不希望准 ...
- Java定义接口变量为接收类型有什么好处(面向接口编程)
个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性. 面向接口编程: 一种规范约束 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者 ...
- 什么叫PV,UV,PR值
1.PV PV(page view),即页面浏览量:用户每1次对网站中的每个网页访问均被记录1次.用户对同一页面的多次访问,访问量累计. 2.什么是UV uv(unique visitor),指访问某 ...
- CSS 发明者 Håkon Wium Lie 访谈--csdn zhangxin09
原文地址:https://dev.opera.com/articles/css-twenty-years-hakon/ ---------------------------------------- ...
- Android 5.0状态栏和导航栏
Material Design推出之后,app中也開始沿用这样的风格 今天来说一下状态栏颜色设置,在4.4的时候推出了透明状态栏和导航栏.在不使用第三方库的情况下,4.4还是没有全然解决存在actio ...
- Unsupported major.minor version (jdk版本错误)解决方案 办法
如果你遇到了 Unsupported major.minor version ,请认真看一下,说不定会有帮助. 我花两个小时总结的经验,你可能10分钟就得到了. ^**^ 一.错误现象: 当改变了jd ...
- python--面向对象—接口
开放封闭原则依赖导致原则接口隔离原则继承多态抽象类和接口类 编程思想:为子类做规范 归一化设计:几个类都实现了相同的方法 抽象类:最好单继承,且可以简单的实现功能 接口类:可以多继承,且最好不实 ...
- kubernetes调度之资源配额示例
系列目录 前面说过,资源配额限制在指定名称空间下,对资源对象数量和特定类型的资源的限制,你可以在ResourceQuota中指定配额 创建名称空间 我们创建一个新的名称空间来演示 kubectl cr ...