August 14th, 2016
Android 5.0 推出了, 矢量图为处理多种屏幕尺寸的带来了很多好处. 这篇文章先介绍了 VectorDrawable 的使用, 然后主要讲如何实时操纵图像的改变, 用实现一个图像变形的效果.
文中的例子是 Android 和 Apple 的 log 在互相变化.
用 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
然后这个文章里有具体的例子介绍如何写并且运行测试, 还附有相关源码.
创建在亚马逊的 Fire TV 上跑的 Android 应用.
文后可以点进 part 2.
Complication 是指手表上显示的除了小时和分钟之外的东西, 比如, 一个电池指示标志.
使用了 Complication API 之后, 用户就可以自己选一个地方, 然后从应用的列表中选一个东东来显示.
Wear 应用是嵌入到一个主应用里面的, 当 google play 上主应用的 apk 被安装到手机上的时候, Wearable 应用会自动安装在配对的设备上.
这篇文章详细介绍了如何创建一个 Wear 应用, 代码在
官方文档:
官方 sample:
之前有一篇文章介绍了用装饰者模式来构建高度模块化的 Android 应用:
那篇文章里也有一个例子.
这篇文章讲同样采用装饰者思想的一个库: .
Router 首先基于一个将 URL 映射到程序界面的库:
Router 在此基础上做出了一些扩展和改进, 可以用一个 map 文件 (YAML/JSON/XML) 来定义基本的构架.
输入是 URL(可以带参数), 根据 map 进行解析, 然后传到 plugins, 然后每个 plugin 创造一部分的输出, 当左右 plugins 的工作结束后, 输出就可用了 (输出是由多个 plugins 组装而成的).
文末附有.
这篇文章研究了在解析 JSON 响应的时候如何提高效率.
作者他们的应用 Vimeo Android 用了 Retrofit 来做网络请求, 用 Gson 来反序列化, 不好的一点就是有点慢, 因为 Gson 用反射来解析 JSON. 为了改进, 他们想要去除反射.
他们创建了自己的 Gson TypeAdapters, 并且利用程序中各个不同大小的 model 来测量对比了了反序列化的时间.
他们的实验测试了不同的机器对于不同大小 model 的处理, 在多数情况下, 不用反射会提高性能, 但是也有例外, 在解析很大的 model 时, 在高性能的机器上, 反而是使用反射的情况比较快.
他们的库:
STAG: Speedy Type Adapter Generation.
讲如何写测试的系列文章, 有一个案例 sample: .
举例了一个 MVP 的真实例子, 然后给 P 写单元测试.
Presenter 里有一个 CompositeSubscription, 用来管理 RxJava 的 subscriptions, detach 的时候会注销所有的订阅, 防止了内存泄露和可能存在危险的 view 操作.
还创建了一个 Contract 接口, 把 View 和 Presenter 的接口定义写在里面.
这里面还有很机智的一点是把 RxJava 要用到的 Scheduler 也从 presenter 的构造函数传入, 这样在测试的时候就可以使用
, 而在 View 里面我们就按实际情况使用其他.
- Schedulers.immediate()
这应该是跟上面那条一个系列文章的第三篇.
介绍了如何用 Retrofit 和 RxJava 请求 Github API 然后解析到 models.
后面是写单元测试, 步骤很清楚, given, when, then.
可以从中学习一下怎么给这种 Retrofit + RxJava 的程序写单元测试.
is a web-based hosting service for projects using Git.
讲了如何使用 BitBucket 或者 Github 作为一个 private 的 Maven repository.
例子:
Gradle 脚本:
比较简单的一个文章, 如何 set up Firebase 的 crash reporting.
其实 Firebase Crash Reporting 一旦构建好之后, 不需要加 java 代码, 所有 uncaught 的异常都是自动报告的.
.
神奇的, 这篇文章讲了用它来实现栅格地形图, 游戏里可以升降的草地的类似的东东. (看文章里的图吧, 我也形容不好.)
遗憾的是 pathData animation 当前在 VectorDrawableCompat library 暂不支持, 所以文中所讲的技术只能在 api 21 及其之上使用.
文中的例子有 9 个方块, 4 个三角形, 把 SVG 作为矢量图 VectorDrawable 导入 Android Studio, 然后给每一个 path 起名字.
本文只是 part 1, 预告了下一篇文章将讲如何动画.
Source code available here:
关于 bottom nav bars 的讨论.
Hamburger menu 有时候感觉不是很理想, 是因为抽屉里的 items 总是隐藏状态, 用户不易发现和使用.
Bottom bar 则把每一个 item 都时刻展现给用户, 在 iOS 上使用得很成功.
Google 在 2016 年 3 月提供了 Guides: .
Stag 通过减少反射改善了 Gson 的性能, 为你的 model 对象自动生成 TypeAdapters.
一个基于 routable-android 的新的 Android URL router, 摒弃了 Activity/Intent 依赖, 并加入了新的特性.
来源: http://www.cnblogs.com/mengdd/p/5784927.html