October 30th, 2016
Android Weekly Issue #229
Android Weekly笔记, 本期内容包括: 性能库Pury的插件化; 一种新的多选设计和实现; 音频播放; Dagger的测试mock方案; ConstraintLayout的链式约束; Mobile Vision API的二维码扫描功能; RxJava的使用缺陷讨论; SOLID原则图解.html
Pury是一个作profile的工具, 前面有过一篇文章介绍: Pury.react
本文是做者的另外一篇文章, 讲Pury的插件化和扩展.android
另外, 做者最近正在集成Google Analytics到Pury中.git
在移动应用上的多选设计很难, 一般不是很灵活, 用起来也不舒服.github
本文推荐了一种全新的多选设计: 把屏幕分为两部分: 包括主要的列表和选中列表. 选中的项目自动移动到选中列表中去.api
这个设计概念的实现: ViewPager
+ 两个RecyclerView
.app
做者选用了kotlin来实现. 列举了几个kotlin的features: Extension functions, Null safety, Collections, Better syntax.dom
做者的库: Multi-Selection.ide
本文中还介绍了如何使用这个库.工具
关于Android上的音频播放, 做者的总结文章.
音频播放的方式有:
关于MediaPlayer
的使用, 官方文档: Media Playback, 本文中有一张图是MediaPlayer
的生命周期图.
做者逐个列举了实际使用这些API时可能会遇到的一些issues. 而且最终选择的最佳解决方案是Google的ExoPlayer, 2.0版本已经解决了她以前遇到的全部issues.
这篇文章讲在使用Dagger1和Dagger2的项目中, 如何为测试mock依赖.
做者讲了ConstraintLayout
的一个重要特性: chains, 链.
chains是一个机制, 把一些独立的Views链起来, 而后咱们能够对这一个集合来采起一些行为.
好比选中一个parent下的两个TextView(这两个原本是分别对齐parent的左右), 而后选择"Center Horizontally", 就是创建了一个链.
在xml中实际上给这两个view都各自加上了一条限制条件, 限制它们在对方的(左/右)边, 这两条对称性的限制条件就构成了一个链.
这种链叫spread chains, 是默认的style.
使用Mobile Vision的Barcode API来进行二维码检测.
Code: barcode-detector.
大多数Rx相关的文章都说优势, 本篇不一样, 做者分享了在使用RxJava过程当中碰到的一些烦人的事情.
不过尽管有这些挫折, RxJava仍然是一个很棒的工具.
RxJava的文档有时候对初学者来讲会很具迷惑性.
推荐看: RxMarbles, 有操做符图解.
RxJava的使用中会构建不少匿名类.
推荐使用: Retrolambda, Kotlin, 或Jack.
这是一个常见的错误, 若是只写好了Observable但没有触发, 一般是没有subscribe, 由于Observable是被动的, 只有当被订阅的时候才会触发.
有时候很难看见一块代码就知道执行结果, 必须往上游排查.
因此做者在他们的项目中规定了一项对于Observable的命名规范:
...Once
表示只发射一次; ...Stream
表示会发射值, 或者不发射, 可是不会completes; ...OnceAndStream
订阅时会发射值, 以后可能会继续发射, 可是不会中止.
...map
操做符有一些比较容易混淆的操做符:
flatMap
: 并行;switchMap
: 中断前一个, 串行;concatMap
: 等待前一个结束, 串行;SOLID是软件开发的五项原则:
SOLID (single responsibility, open-closed, Liskov substitution, interface segregation and dependency inversion).
这里是Wiki的解释.
这篇文章图形化地解释了SOLID, 配图和例子都颇有趣.
Material Design的新工具套件和开源项目.
一个MVP库. 比较特别的几点:
easymvp-rx
插件后, 遵循Clean Architecture原则, 加入了domain层, 提供了UseCase的基类;一个小的工具库, 能够按格式显示用户的输入. 好比在输入上加括号, 每三位数字空一格之类的.
一个脚本, 同步你local Android SDK中的全部artifacts到一个remote的Maven artifact host上.
material-remixer是一个工具, 利用它能够实时调整产品的UI参数. 目标平台: Android, iOS和Web都能用的工具.
ConstraintLayout beta 2发布啦, 修改了一些issues并改善了性能.
Google Play Service 9.8发布了.
Firebase也发了新版.