Android Weekly Issue #261

June 11th, 2017
Android Weekly Issue #261
本期内容包括: Adaptive Icons; Kotlin实现的几种常用的设计模式; Android Instant App; Kotlin中的Ranges; 一个叫Graywater的库, 可以改善RecyclerView的性能; ItemDecoration的使用; 函数式编程; 提高Gradle的build的速度; 用RxJava 2包装Camera2 API.

代码部分有一个Kotlin实现的RSS阅读器值得一看.

ARTICLES & TUTORIALS

Adaptive Icons and more

关于Android O的Adaptive Icons, 这里是官方的文档: Adaptive Icons.

这篇文章介绍了如何用Android Studio制作这种icon.

Gang of Four Patterns in Kotlin

用Kotlin实现的各种设计模式:

  • Decorator -> 用extension functions.
  • Builder -> 用apply.
  • Prototype -> 用datacopy.
  • Singleton -> 用object关键字.
  • Template Method -> 用extension functions.
  • Strategy -> 方法参数, typealias, 高阶函数.
  • Iterator -> interator().

这是作者实现的repo: gof-in-kotlin.

From Westinghouse to Android Instant apps

作者讲了他和Instant App的故事.

Musings on Kotlin Ranges

作者讲了他发现的一些关于Kotlin的Ranges的有趣的事情:

  • IntRange如果初始值比结束值大, 会被认为是空的. 想要逆序的话就得用downTo或者reversed().
  • in range会被编译器优化为两个<=条件判断, 所以我们可以利用这点来简化我们本来的判断.
  • 几种range的for循环效率比较.

Introducing Graywater for Android

介绍一个叫Graywater的库, 处理RecyclerView中的复杂项目, 据说可以改善滚动性能, 减少内存使用, 而且提供了一种组件化的构建方式.

Making the Domain Android App Instant

Domain的Instant App实现, 概要介绍, 不涉及太多细节.
文章后面说了一些Instant App的限制, 比如: 4MB大小; 只有有限的权限, intent和库.

ItemDecoration - Avoid adding dividers to the view layout

ItemDecoration的介绍.

首先, 不要用在布局里加View的方法来加divider, 这对性能不好. 增加了多余的View, 还可能需要增加层级.

其次, 加View的方式也有一些副作用, 比如左右滑动item动画的时候, divider会和View一起移动, 这显然不好看.

最后, 加View的方式也不如ItemDecoration那样具有灵活性. 比如你想加不同长度的divider给不同位置的item.

所以推荐使用ItemDecoration. 自动25.0.0开始, support库还添加了DividerItemDecoration类.

注意:

  • 一个RecyclerView可以添加多个ItemDecoration.
  • onDraw()是在绘制item之前, onDrawOver()是在绘制item之后.

Functional Programming for Android Developers — Part 3

函数式编程教学第三部分, 主要讲高阶函数和Closures.

前两部分见:

How to speed up your slow Gradle builds

Google I/O 2017关于如何提高gradle build速度的10个建议:

  • 1.使用最新的Gradle plugin.
  • 2.避免使用老的multidex, 在API 21以前会有性能影响.
  • 3.在开发时disable multi-APK.
  • 4.最小化包含的资源.
  • 5.在开发时关闭PNG优化.
  • 6.使用Instant Run.
  • 7.避免非故意的改动. 如把vesionCode和当前时间相关, 这样每次build就等于manifest会被改变. 还有Crashlytics会为每次build生成id. 可以在develop的时候关闭这些.
  • 8.不要使用动态的依赖版本.
  • 9.注意memory的设置. 在gradle.properties中, 如org.gradle.jvmargs=-Xmx2048m.
  • 10.使能缓存. 在gradle.properties中, org.gradle.caching=true.

Reactive selfies with Camera2 API on Android - Part 1

作者的一个教程, 用RxJava2包装Camera2的API.
文章讲得很仔细, 项目代码见: Camera2API_rxJava2.

Re-animation

作者更新了他关于向量动画的文章, 因为support库25.4中加入了对老版本的兼容.

LIBRARIES & CODE

Karchitec

Kotlin的RSS阅读器, 使用了Google的android architecture components库.

SwiftKotlin

一个工具, 可以把Swift代码转换为Kotlin代码.

Graywater

一个改善RecyclerView滚动性能的库.

Fontify

提供不同语言自定义字体和style的TextView, EditText和Button.

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

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

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

  5. Android Weekly Notes Issue #221

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

  6. Android Weekly Notes Issue #219

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

  7. Android Weekly Notes Issue #236

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

  8. Android Weekly Notes Issue #235

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

  9. Android Weekly Notes Issue #234

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

随机推荐

  1. Importance sampling

    用蒙特卡洛求解积分时 (Monte Carlo 随机采样对目标积分函数做近似) importance sampling func p(x) p(x)值大的地方,Monte Carlo多采几次 值小的地 ...

  2. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...

  3. [Redis]windows下redis的安装和启动

    官方的下载地址是: http://redis.io/download 在win64一栏中能够看到redis原本是没有windows版本号的,windows版本号是Microsoft Open Tech ...

  4. DexClassLoader和PathClassLoader载入Dex流程

    0x00 在上一篇文章apk安装和优化原理,在最后我们分析了DexClassLoader和PathClassLoader的构造函数的不同. PathClassLoader最后调用的是new DexFi ...

  5. GSL 1.15 and 1.16 building with Visual Studio 2010 --FROM 4fire

    http://4fire.wordpress.com/2012/03/18/gsl-1-15-building-with-visual-studio-2010/ Update 05/02/2014: ...

  6. 利用 LeakCanary 来检查 Android 内存泄漏

    前言 你被概率性的 OOM 困扰么?有时候,OOM 像幽灵一样,挥之不去,可真想把它揪出来时,又捉之不着.或许,是时候用 LeakCanary 来诊断一下了.它是一个用来检查 Android 下内存泄 ...

  7. Linux安装httpd2.4.10

    1. cd /mnt tar zxvf httpd-2.4.10.tar.gz ./configure --prefix=/mnt/apache2 --enable-dav --enable-modu ...

  8. 重读金典------高质量C编程指南(林锐)-------第一章 文件结构

    第一章  文件结构       C/C++程序通常由两个文件组成,一个文件保存程序的声明,称为头文件,.h 文件.一个保存程序的实现,称为定义文件.c文件. 1.1 版权与版本的声明 版权和版本的声明 ...

  9. 如何在vs2010中添加Picture控件

    1.新建项目,并在对话框控件中拖入picture控件,并做如下设置 2.在picture控件的属性栏需要进行如下修改:ID需要修改,不能为static ID是控件的唯一标识,PictureCtrl(p ...

  10. Buck电路匹配和二极管仿真模式

    Buck带同步整流,关闭二极管仿真模式会使空载损耗大 利用二极管仿真模式提高降压转换器轻负载效率 Buck电路工作原理以及三种工作模式分析   一.Buck电路原理图 Buck电路,又称降压电路,其基 ...