Android Weekly Notes Issue #237
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的更多相关文章
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- Android Weekly Notes Issue #236
Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...
- Android Weekly Notes Issue #235
Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...
- Android Weekly Notes Issue #234
Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...
- Android Weekly Notes Issue #231
Android Weekly Issue #231 November 13th, 2016 Android Weekly Issue #231 Android Weekly阅读笔记, Issue #2 ...
随机推荐
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- XSS
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- AutoMapper随笔记
平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html#skill 先看效果:(完整Demo:https://git ...
- SQL Server-聚焦UNIOL ALL/UNION查询(二十三)
前言 本节我们来看看有关查询中UNION和UNION ALL的问题,简短的内容,深入的理解,Always to review the basics. 初探UNION和UNION ALL 首先我们过一遍 ...
- spring源码分析之context
重点类: 1.ApplicationContext是核心接口,它为一个应用提供了环境配置.当应用在运行时ApplicationContext是只读的,但你可以在该接口的实现中来支持reload功能. ...
- c++ pair 使用
1. 包含头文件: #include <utility> 2. pair 的操作: pair<T1,T2> p; pair<T1,T2> p(v1,v2); pai ...
- springmvc+mybatis+spring 整合 bootstrap html5
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...
- iOS - 模态Model视图跳转和Push视图跳转的混合需求实现原理
在研发中总会遇到一些莫名的需求,本着存在即合理的态度跟大家分享一下"模态Model视图跳转和Push视图跳转的需求实现",本文仅仅传授研发技术不传授产品以及UE的思想,请大家合理对 ...
- 项目自动化建构工具gradle 入门1——输出helloWorld
先来一个简单的例子,4个步骤: 1.进入D:\work\gradle\java 目录 ,您电脑没这目录? 那辛苦自己一级一级建立起来吧 新建文件build.gradle,文件内容是: apply p ...