Android Weekly Issue #237

December 25th, 2016
Android Weekly Issue #237
这是本年的最后一篇issue, 感谢大家.
本期内容包括: ConstraintLayout的使用; Android Things的应用; 如何利用第三方库使得Java具有Kotlin的一些新特性; Firebase是如何利用ContentProvider进行初始化的; Kotlin上的并发处理; 其他还有一些关于程序架构, 代码优化相关的讨论.

ARTICLES & TUTORIALS

Building interfaces with ConstraintLayout

本文介绍ConstraintLayout的chains和ratios. 另外还提到很多使用ConstraintLayout的实现细节.

所谓chains就是几个View之间建立的双向约束.

ratios是帮助你设置View的宽高比, 它所做的事情和PercentFrameLayout差不多, 但是不用添加额外的ViewGroup.

Electronic Candle using Android Things

用ObjectAnimator和Android Things搭建的一个电子蜡烛.

ExoPlayer 2.1 - What’s new

ExoPlayer 2.1有什么新功能.
这是他们的release notes.

Living (Android) without Kotlin

如果你因为种种原因不能在项目中使用kotlin, 这篇文章告诉你如何借助于一些工具和库用Java实现Kotlin的一些features.

Christmas Voice – Part 1

作者发布了一个改变声音的应用, 并且将其开源了: ChristmasVoice.

How does Firebase initialize on Android?

Firebase在Android上是如何初始化的?

很多SDK在初始化的时候会要求应用传入Context. Firebase简化了这一步骤. 解决方案就是用了ContentProvider, 既解决了时间问题, 也得到了sdk需要的Context. 并且不需要应用的开发者添加任何额外的初始化代码.

选择ContentProvider主要有两点原因:

  • ContentProvider初始化早.
    当一个Android进程启动的时候, 首先会初始化每一个ContentProvider, 然后是Application, 最后是被Intent启动的组件.

在ContentProvider初始化的时候, 就可以拿到Context了.

  • ContentProvider可以merge到最终的manifest里.
    Manifest merge是在build的时候来定义你的应用最终的manifest. 最终的manifest会包含所有依赖的库的manifest中声明的组件.

如果你也想选择用ContentProvider来做应用或库的初始化, 请注意authority的唯一性问题和ContentProvider只在主进程运行的问题.

Seductive Code

当我们在改善代码可读性的时候, 很有可能会影响到性能和可维护性.

作者举例说明了他在实际编程中遇到的几个问题.

Testing Android Things – Unit & Vendor tests

如何开发Android Things应用, 才能让测试更加容易. 本文以一个很小的LED灯闪烁程序为例.

Engineering the Architecture Behind Uber’s New Rider App

Uber团队重新打造了他们的ride app, 提出了一个新的构架模式: Riblets.

关于架构的选型, 已有的类型可以查看这个iOS Architecture Patterns.

Rebuilding the Buffer Android Composer

作者重构了自己应用的代码, 应用了clean architecture, 本文讲述了其过程.

Papercut

Papercut是一个库, 用来标记那些我们觉得需要删除或者需要重构的代码.

Concurrency Primitives in Kotlin

作者最近看了一本书, 讲Android的并发, 觉得很好, 想要用Kotlin来重写书中的例子, 结果发现:

  • Kotlin中没有synchronized关键字.
  • Kotlin中没有volatile关键字.
  • Kotlin中的Any, 类比于Java中的Object, 但是却没有wait(), notify()notifyAll()方法.

所以Kotlin中的并发是怎么处理呢? 这里有个问题: Kotlin forum, Kotlin语言的开发人员表示这些应该由库来处理, 而不是语言本身.

尽管Kotlin不支持, 但是它还是提供了一些底层的并发工具.

  • 创建线程. 因为Kotlin可以调用Java代码, 所以仍然可以通过两种方法来创建线程.
  • @Synchronized注解和synchronized()方法.
  • @Volatile注解.
  • 没有wait(), notify()notifyAll()方法, 但是可以把Object对象作为锁, 然后调用锁的这些方法.

stackoverflow上有一个相关问题, 答案很不错, 列了处理并发的一些有用的库.

LIBRARIES & CODE

KataScreenshotAndroid

一个Screen Kata应用, 用来练习做UI测试的.

Papercut

一个用来标记需要重构或者移除代码的工具库.

Squint

一个可以自定义的对角线切割View.

Colorful

一个动态的主题库, 让你可以方便地修改应用的颜色.

scytale

包装了JCA API和AndroidKeyStore API, 让创建, 加密和管理任何Android API的keys变得更容易.

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

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

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  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. PHP以接口方式实现多重继承(完全模拟)--学习笔记

     1.UML类图: 2.PHP代码: <?php /** * Created by PhpStorm. * User: andy * Date: 16-11-23 * Time: 下午7:57 ...

  2. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

  3. iOS开发之多种Cell高度自适应实现方案的UI流畅度分析

    本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...

  4. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  5. LINQ to SQL Select查询

    1. 查询所有字段 using (NorthwindEntities context = new NorthwindEntities()) { var order = from n in contex ...

  6. StringUtils的isBlank与isEmply

    1.public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 StringUtil ...

  7. IT运维监控解决方案介绍

    现状 •小公司/ 创业团队< 500台服务器规模 开源方案:Zabbix.Nagios.Cacti- 云服务提供商:监控宝.oneAlert等 •BAT级别> 10万台服务器 投 ...

  8. 从国内流程管理软件市场份额看中国BPM行业发展

    随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...

  9. Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷

    今天给客户配置故障转移群集,在Windows Server 2012 R2的系统上,通过iSCSI连接上DELL的SAN存储后,在磁盘管理里面发现可以新建 简单卷.跨区卷.带区卷.镜像卷.RAID-5 ...

  10. myeclipse学习总结二(myeclipse安装svn插件)

    1.在myeclipse中要安装svn插件,首先是下载svn插件. 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?fold ...