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的更多相关文章

  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. Quartz

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...

  2. 一种简单的CQRS架构设计及其实现

    一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:"如何设计一个松耦合.高伸缩性.易于维护的架构?".之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻 ...

  3. (转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)

    前言: 上节用纯linux的函数实现了和云端通讯, 本节开始利用传说中的神器libcurl 话说一个网络程序员对书法十分感兴趣,退休后决定在这方面有所建树. 于是花重金购买了上等的文房四宝.    一 ...

  4. ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之22.ABP展现层——导航栏设置 ABP是“ASP.NET Boilerplate Project (ASP.NE ...

  5. 我们为什么不能只用O记号来谈论算法?

    在刷LeetCode-1TwoSum的时候,有个人在论坛留言,大致意思如下: 我的算法击败了90%的人,O(nlgn)算法比O(n)算法快. 我觉得这个人是不懂算法的.让我一步一步解释. # O的含义 ...

  6. redis的面试题

    1:使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,lis ...

  7. Windows 10 部署Enterprise Solution 5.5

    Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...

  8. 解析大型.NET ERP系统 设计异常处理模块

    异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...

  9. 解析大型.NET ERP系统 数据审计功能

    数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...

  10. Lua BehaviourTree 各节点说明

    项目说明 本行为树的代码使用Lua编写,所有的内容也建立的Lua的基础语法之上 因为公司项目需求,需要一套Lua的行为树代码,所以尝试从饥荒中抽离了行为树相关的代码.绝大多数节点行为与饥荒中相同,不过 ...