Android Weekly Notes Issue #218
Android Weekly Issue #218
August 14th, 2016
http://androidweekly.net/issues/issue-218
ARTICLES & TUTORIALS
PathMorphing with AnimatedVectorDrawables
Android 5.0 推出了VectorDrawable, 矢量图为处理多种屏幕尺寸的带来了很多好处. 这篇文章先介绍了VectorDrawable的使用, 然后主要讲如何实时操纵图像的改变, 用AnimatedVectorDrawable实现一个图像变形的效果.
文中的例子是Android和Apple的log在互相变化.
source code available
Android UI Instrumentation test with Espresso
用Espresso写UI功能测试, 通常是: 定位UI元素, 然后与其交互, 检查UI元素的状态.
三种主要的组件是: ViewMatchers, ViewActions 和ViewAssertions.
一个简短的例子:
onView(withId(R.id.my_view)) // withId(R.id.my_view) - ViewMatcher
.perform(click()) // click() - ViewAction
.check(matches(isDisplayed())); //matches(isDisplayed()) - ViewAssertion
为了测试不受animation的影响, 有时候可能需要把设备上的Developer Options里的下面几个animation全关掉:
Window animation scale
Transition animation scale
Animator duration scale
然后这个文章里有具体的例子介绍如何写并且运行测试, 还附有相关源码.
How to Build an Android App for Fire TV - Part 1
创建在亚马逊的Fire TV上跑的Android应用.
文后可以点进part 2.
Android Wear Development for beginners
Complication是指手表上显示的除了小时和分钟之外的东西, 比如, 一个电池指示标志.
使用了Complication API之后, 用户就可以自己选一个地方, 然后从应用的列表中选一个东东来显示.
Wear应用是嵌入到一个主应用里面的, 当google play上主应用的apk被安装到手机上的时候, Wearable应用会自动安装在配对的设备上.
这篇文章详细介绍了如何创建一个Wear应用, 代码在github
官方文档: Watch Face Complications
官方sample: android-WatchFace
Router — Everything in its Right Place
之前有一篇文章介绍了用装饰者模式来构建高度模块化的Android应用: Creating Highly Modular Android Apps
那篇文章里也有一个例子Decorator.
这篇文章讲同样采用装饰者思想的一个库: Router.
Router首先基于一个将URL映射到程序界面的库: routable-android
Router在此基础上做出了一些扩展和改进, 可以用一个map文件(YAML/JSON/XML)来定义基本的构架.
输入是URL(可以带参数), 根据map进行解析, 然后传到plugins, 然后每个plugin创造一部分的输出, 当左右plugins的工作结束后, 输出就可用了(输出是由多个plugins组装而成的).
文末附有sample.
Boosting app performance with reflectionless (de)serialization
这篇文章研究了在解析JSON响应的时候如何提高效率.
作者他们的应用Vimeo Android用了Retrofit来做网络请求, 用Gson来反序列化, 不好的一点就是有点慢, 因为Gson用反射来解析JSON. 为了改进,他们想要去除反射.
他们创建了自己的Gson TypeAdapters, 并且利用程序中各个不同大小的model来测量对比了了反序列化的时间.
他们的实验测试了不同的机器对于不同大小model的处理, 在多数情况下, 不用反射会提高性能, 但是也有例外, 在解析很大的model时, 在高性能的机器上, 反而是使用反射的情况比较快.
他们的库: stag-java
STAG: Speedy Type Adapter Generation.
Introduction to Automated Android Testing - Part 4
讲如何写测试的系列文章, 有一个案例sample: GithubUsersSearchApp.
举例了一个MVP的真实例子, 然后给P写单元测试.
Presenter里有一个CompositeSubscription, 用来管理RxJava的subscriptions, detach的时候会注销所有的订阅, 防止了内存泄露和可能存在危险的view操作.
还创建了一个Contract接口, 把View和Presenter的接口定义写在里面.
这里面还有很机智的一点是把RxJava要用到的Scheduler也从presenter的构造函数传入, 这样在测试的时候就可以使用Schedulers.immediate(), 而在View里面我们就按实际情况使用其他.
Introduction to Android Testing - Part 3
这应该是跟上面那条一个系列文章的第三篇.
介绍了如何用Retrofit和RxJava请求Github API然后解析到models.
后面是写单元测试, 步骤很清楚, given, when, then.
可以从中学习一下怎么给这种Retrofit + RxJava的程序写单元测试.
Git as a secure private Maven repository
Bitbucket is a web-based hosting service for projects using Git.
讲了如何使用BitBucket或者Github作为一个private的Maven repository.
例子: WagonGitExample
Gradle 脚本: GitAsMaven
Crash reporting in Firebase
比较简单的一个文章, 如何set up Firebase的crash reporting.
其实Firebase Crash Reporting一旦构建好之后, 不需要加java代码, 所有uncaught的异常都是自动报告的.
Firebase Report Crashes.
Isometric AnimatedVectorDrawable – Part 1
神奇的AnimatedVectorDrawable, 这篇文章讲了用它来实现栅格地形图, 游戏里可以升降的草地的类似的东东. (看文章里的图吧, 我也形容不好.)
遗憾的是pathData animation当前在VectorDrawableCompat library暂不支持, 所以文中所讲的技术只能在api 21及其之上使用.
文中的例子有9个方块, 4个三角形, 把SVG作为矢量图VectorDrawable导入Android Studio, 然后给每一个path起名字.
本文只是part 1, 预告了下一篇文章将讲如何动画.
Source code available here: IsometricAnimatedVector
Design
Don't just port an iOS navigation model to Android
关于bottom nav bars的讨论.
Hamburger menu有时候感觉不是很理想, 是因为抽屉里的items总是隐藏状态, 用户不易发现和使用.
Bottom bar则把每一个item都时刻展现给用户, 在iOS上使用得很成功.
Google在2016年3月提供了Guides: Bottom navigation.
- 什么时候该用bottom navigation呢?
应用有3到5个top级别的目的地, 且它们需要直接被访问, 从各个目的地之间转换, 并且它们应该是具有同等重要性的. - 什么时候bottom navigation不适用呢?
不能因为怕用户看不见一个东东, 就把它放在bottom nav bar, 作为推广手段.
bottom nav bar也不是用来放menu的, 比如放不下了加个more tab, 展开以后是更多的二级页面入口; 也不要用来放一些弹出窗口, 它们同样也不是top level的目的地.
bottom nav bar不能放低级别的目的地.
最后文章强调了每个平台应该遵从自己的特性, 对Android来说, 如果完全拷贝iOS的设计可能不是一个好主意.
LIBRARIES & CODE
stag-java
Stag通过减少反射改善了Gson的性能, 为你的model对象自动生成TypeAdapters.
Router
一个基于routable-android的新的Android URL router, 摒弃了Activity/Intent依赖, 并加入了新的特性.
Android Weekly Notes Issue #218的更多相关文章
- 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的使用; ...
随机推荐
- Princeton Algorithms week3 Assignment
这周编程作业是实现检测点共线的算法.和排序算法有关系的地方在于,对斜率排序后可以很快的检测出来哪些点是共线的,另外这个算法的瓶颈也在于排序的性能. 一点收获: java传参数时传递的是值,这很多人都知 ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- vagrant 1.8.6 安装过程及总结遇到的坑
下面先总结遇到的问题,这些问题如果你也遇到,可能需要搜索很多次才能找到原因. 如果想看安装过程,可以先直接跳到后面第二部分部分. 1 问题汇总: 1.1 vagrant版本过高问题. vagrant ...
- WCF学习之旅—实现支持REST服务端应用(二十三)
在上一篇(WCF学习之旅—实现REST服务(二十二))文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,本文讲解一下如何创建一个支持REST的WCF服务端程序. 四.在WCF中 ...
- Python TODO
参数类型和用法 所有的双划线方法以及特性 类的构建过程 实例的构建过程 元类MetaClass 装饰器 描述符 迭代器 上下文管理器 生成器 lambda 数据结构,集合 垃圾回收机制 类方法,静态方 ...
- 前端学HTTP之连接管理
前面的话 HTTP连接是HTTP报文传输的关键通道.要掌握HTTP就需要理解HTTP连接的来龙去脉以及如何使用这些连接 如果想查看一个网页,浏览器收到URL时,会执行下图所示的步骤.将服务器的IP地址 ...
- webapi+Task并行请求不同接口实例
标题的名称定义不知道是否准确,不过我想表达的意思就是使用Task特性来同时请求多个不同的接口,然后合并数据:我想这种场景的开发对于对接过其他公司接口的人不会陌生,本人也是列属于之内,更多的是使用最原始 ...
- ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...
- 非关系型数据库来了,CRL快速开发框架升级到版本4
轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有 新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了! ...
- RHEL6.4 + Oracle 11g DG测试环境快速搭建参考
环境现状: 两台虚拟主机A和B: 1. A机器已安装ASM存储的Oracle 11g 实例 参考:http://www.cnblogs.com/jyzhao/p/4332410.html 2 ...