Android Weekly Issue #229

October 30th, 2016
Android Weekly Issue #229
Android Weekly笔记, 本期内容包括: 性能库Pury的插件化; 一种新的多选设计和实现; 音频播放; Dagger的测试mock方案; ConstraintLayout的链式约束; Mobile Vision API的二维码扫描功能; RxJava的使用缺陷讨论; SOLID原则图解.

ARTICLES & TUTORIALS

Get access to raw profiling results with plugins for Pury

Pury是一个做profile的工具, 前面有过一篇文章介绍: Pury.

本文是作者的另一篇文章, 讲Pury的插件化和扩展.

另外, 作者最近正在集成Google Analytics到Pury中.

Building a Multiselection Solution for Android in Kotlin

在移动应用上的多选设计很难, 通常不是很灵活, 用起来也不舒服.

本文推荐了一种全新的多选设计: 把屏幕分为两部分: 包括主要的列表和选中列表. 选中的项目自动移动到选中列表中去.

这个设计概念的实现: ViewPager + 两个RecyclerView.

作者选用了kotlin来实现. 列举了几个kotlin的features: Extension functions, Null safety, Collections, Better syntax.

作者的库: Multi-Selection.

本文中还介绍了如何使用这个库.

Audio (not) playing in Android

关于Android上的音频播放, 作者的总结文章.

音频播放的方式有:

关于MediaPlayer的使用, 官方文档: Media Playback, 本文中有一张图是MediaPlayer的生命周期图.

作者逐个列举了实际使用这些API时可能会遇到的一些issues. 并且最终选择的最佳解决方案是Google的ExoPlayer, 2.0版本已经解决了她之前遇到的所有issues.

Providing test doubles with Dagger 1 and Dagger 2

这篇文章讲在使用Dagger1和Dagger2的项目中, 如何为测试mock依赖.

ConstraintLayout Chains – Part 1

作者讲了ConstraintLayout的一个重要特性: chains, 链.
chains是一个机制, 把一些独立的Views链起来, 然后我们可以对这一个集合来采取一些行为.

比如选中一个parent下的两个TextView(这两个本来是分别对齐parent的左右), 然后选择"Center Horizontally", 就是建立了一个链.
在xml中实际上给这两个view都各自加上了一条限制条件, 限制它们在对方的(左/右)边, 这两条对称性的限制条件就构成了一个链.

这种链叫spread chains, 是默认的style.

Machine Learning with the Mobile Vision API — Part 2

使用Mobile Vision的Barcode API来进行二维码检测.
Code: barcode-detector.

Reactive Frustrations

大多数Rx相关的文章都说优点, 本篇不同, 作者分享了在使用RxJava过程中碰到的一些烦人的事情.
不过尽管有这些挫折, RxJava仍然是一个很棒的工具.

文档

RxJava的文档有时候对初学者来说会很具迷惑性.
推荐看: RxMarbles, 有操作符图解.

匿名类

RxJava的使用中会构建很多匿名类.
推荐使用: Retrolambda, Kotlin, 或Jack.

忘记subscribe

这是一个常见的错误, 如果只写好了Observable但没有触发, 通常是没有subscribe, 因为Observable是被动的, 只有当被订阅的时候才会触发.

代码的推理

有时候很难看见一块代码就知道执行结果, 必须往上游排查.

所以作者在他们的项目中规定了一项对于Observable的命名规范:
...Once表示只发射一次; ...Stream表示会发射值, 或者不发射, 但是不会completes; ...OnceAndStream订阅时会发射值, 之后可能会继续发射, 但是不会停止.

...map操作符

有一些比较容易混淆的操作符:

  • flatMap: 并行;
  • switchMap: 中断前一个, 串行;
  • concatMap: 等待前一个结束, 串行;

Designing something S.O.L.I.D

SOLID是软件开发的五项原则:

SOLID (single responsibility, open-closed, Liskov substitution, interface segregation and dependency inversion).

这里是Wiki的解释.

这篇文章图形化地解释了SOLID, 配图和例子都很有趣.

DESIGN

Design Is Never Done

Material Design的新工具套件和开源项目.

LIBRARIES & CODE

EasyMVP

一个MVP库. 比较特别的几点:

  • 使用注解来注入Presenter(可以和Dagger2结合使用, 否则只能注入无参构造), 绑定Presenter和View的生命周期;
  • 使用Loaders来字啊configurations changes时保存Presenter;
  • 加上easymvp-rx插件后, 遵循Clean Architecture原则, 加入了domain层, 提供了UseCase的基类;

Input Mask

一个小的工具库, 可以按格式显示用户的输入. 比如在输入上加括号, 每三位数字空一格之类的.

sdk-artifact-sync

一个脚本, 同步你local Android SDK中的所有artifacts到一个remote的Maven artifact host上.

material-remixer

material-remixer是一个工具, 利用它可以实时调整产品的UI参数. 目标平台: Android, iOS和Web都能用的工具.

News

ConstraintLayout beta 2 is now available

ConstraintLayout beta 2发布啦, 修改了一些issues并改善了性能.

Google Play Services Release Notes

Google Play Service 9.8发布了.

Some new Firebase libraries

Firebase也发了新版.

Android Weekly Notes Issue #229的更多相关文章

  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 #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  5. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  6. Android Weekly Notes Issue #236

    Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...

  7. Android Weekly Notes Issue #235

    Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...

  8. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...

  9. Android Weekly Notes Issue #231

    Android Weekly Issue #231 November 13th, 2016 Android Weekly Issue #231 Android Weekly阅读笔记, Issue #2 ...

随机推荐

  1. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  2. 【完全开源】知乎日报UWP版(下篇):商店APP、github源码、功能说明。Windows APP 良心出品。

    目录 说明 功能 截图+视频 关于源码和声明 说明 陆陆续续大概花了一个月的时间,APP算是基本完成了.12月份一直在外出差,在出差期间进行了两次功能完善,然后断断续续修补了一些bug,到目前为止,我 ...

  3. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...

  4. ABP源码分析二十八:ABP.MemoryDB

    这个模块简单,且无实际作用.一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍),一般用了数据库 ...

  5. es6之let和const

    在javascript中,我们都知道使用var来声明变量.javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量. 函数级作用域会导致一些问题就是某些代码块内的变量 ...

  6. 将自己打代码添加到cocoapods

    1,Github 上创建新站点 2, 从gitHub上 clone 一份,将源码拷贝到该目录下提交3,开源库发布之后,需要打上tag git tag 0.0.1 git push --tags git ...

  7. iOS 之消息推送(个推)---个人小结

    前言:自从上个星期开始整这个推送,弄了差不多一个星期,今天终于给整好了,因此现在来记录这段"奇妙"的旅程. 我们公司使用的消息推送是用的第三方--个推,这里不得不说一下,个推的技术 ...

  8. Python标准模块--argparse

    1 模块简介 你一定很奇怪Python是如何命令行中的变量的吧?argparse就是用来解决这个问题的,argparse是optparse的替代. 2 模块使用 2.1 开始 我发现解释一个编程的概念 ...

  9. python网络爬虫 新浪博客篇

    上次写了一个爬世纪佳缘的爬虫之后,今天再接再厉又写了一个新浪博客的爬虫.写完之后,我想了一会儿,要不要在博客园里面写个帖子记录一下,因为我觉得这份代码的含金量确实太低,有点炒冷饭的嫌疑,就是把上次的代 ...

  10. .NET Core的文件系统[2]:FileProvider是个什么东西?

    在<读取并监控文件的变化>中,我们通过三个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来我们继续从设计的角度来继续认识它.这个抽象的文件系统以目录的形式来组织文件,我们可以利用 ...