July 8th, 2018

Android Weekly Issue #317

本期主要内容包括"重磅"的Udacity放弃RN(其实是因为他们RN写的那个Feature不要了),还包括如七部使用Google Page Lib,如何用Room设计与创建可维护的数据库等Code Guide的文章,以及Android P字体渲染,放大镜,Google新版Universal Music Play Sample,还有Retrofit如何工作,如何通过Kotlin Extension Generation来改善Dagger Butterknife使用体验,等等.

ARTICLES & TUTORIALS

State of Kotlin

Kotlin状态的一些列数据,包括它的使用率,渗透率,在项目中的应用率等多种多样的数据,并且可以订阅.

一切数据表明,Kotlin在过去的一年中发展迅速,使用量Double,并且好评如潮.

How does Retrofit work

文章讲述了Retrofit如何工作,实际上是通过Proxy而非Processor去生成代码来实现的.文章表示在运行速度与编译速度上的Compromise是一个值得思考的问题.

Exploring Android P: Magnifier

Android P提供了放大镜功能,并且TextView默认就实现了.

国内用户应该不是很陌生,几年前国内的一些大Android浏览器厂商在WebView里面也有类似的功能,不过主要是Android copy了 iOS的默认属性...

Tracking Android app metrics

文章介绍了CI上使用StatHat上传APK的一些数据,比如size等,然后发现问题后通过Danger给Github的PR上面发出报警.

这两个都是Ruby的应用.

Kotlin extension function generation

文章介绍了自己给Dagger与Butterknife写的ktx.

由于Dagger使用了生成文件进行注入,所以必须先编译一边才能通过Compiler生成文件,使用起来不便.

而ButterKnife使用了反射通过类名将自己Generate的辅助类在运行时创建,我们想消除这个反射.

这些原因都因为Processor只能生成文件,而无法改变已有文件.

所以作者使用了Kotlin Extension,首先在Lib里定义了一些Mock的接口,所以编译之前可以调用这些空实现.而在编译过程中,Compiler会生成对应的扩展方法,这样Dagger与Butterknife的问题都得以解决.

What's new for text in Android P

Android P在TextView上下了狠功夫,增加了很多功能.

  • PrecomputedText

复杂字体Font在显示的时候实际上90%的时间都耗费在Measure计算上, 可以在后台线程通过PrecomputedText计算,然后在UI线程set

  • Magnifier

放大镜,上篇有提到.TextView自己默认实现了.

  • Smart Linkify

TextView方按选中可以通过Google的ML处理解析,提供可能相关的应用显示在Copy Cut Paste旁边,这一切都是通过TextClassifier实现的.

  • Line Height & Baseline Alignment

提供了几个Attribute控制文字行高,以及baseline的top与bottom margin.

app:lineHeight
app:firstBaselineToTopHeight
app:lastBaselineToBottomHeight

React Native: A retrospective from the mobile-engineering team at Udacity

Udacity也放弃了RN,看了整片博客,感觉是他们可能只是为了凑个热度.

首先他们放弃的最主要原因是他们就一个Feature用了RN,而且当时也是因为它很独立,然后尝试了RN,现在这个Feature不用了,就删掉了.

然后他们的Android Dev细数了RN的十宗罪,但是都是我们大概能想到的.

比如实际上两个平台尤其android还是需要通过改code来修bug或者特殊需求,RN与native互通麻烦,RN导致CI编译长,包增大,启动变慢,RN文档欠缺,代码变更太快,自身bug多,不同设备不同表现,遇到问题常常需要改源码等等等等.

而之所以当初要使用,主要原因是为了省事,可惜后来发现还是费事了,所以以后再也不会考虑RN了.

Automated testing will set your engineering team free

作者介绍了他们的应用是如何保证质量的,答案就是写测试,一般feature手工只测一遍,剩下就得自动化测试.

测试他们分为三类, UT是开发来写, 基本覆盖每一个函数,集成测试用Robolectric是QA负责来写,End to End test使用Espresso,Instrument Test等,整个跑下来不能超过三小时.

Compiler-based security mitigations in Android P

从Android P开始基于Clang编译器做了很多优化,提升了稳定性,降低了被攻击的风险.

如CFI (Control Flow Integrity

) 技术,主要是增加了虚函数指针偏移指向地址的检查,如果发现指向非法地址就会终止编译.

IOS (Integer Overflow Sanitization

) 技术会检测有符号或者无符号的Integer在算法中溢出的问题,并且优化后运用到了一些库的编译中,如libui, libnl,libexif等...

7 steps to implement Paging library in Android

文章介绍了如何使用Google Architecture Component里面的Page来实现分页加载.

总共有七步,关键是实现PageKeyedDataSource接口封装MutableLiveData. 实现DataSource.Factory将DataSource封装成Factory.

然后就可以通过LivePagedListBuilder来生成数据了.

A New Universal Music Player

鉴于大家对Google的Universal Music Player的喜爱,推出V2版,采用Kotlin与MVVM的架构,但是还有一些小功能没有加进来.

Publishing your library to jCenter from Android Studio

作者在网上找如何上传jcenter,找了很多说法不一的,所以一怒之下自己写了一篇.

Maintainable Architecture – Five Day Forecast Data Layer

作者通过实现一个天气预报软件的数据库,来介绍如何设计以及使用正确的方案来确保软件架构正确与维护的成本.

PS:使用的是Room.

LIBRARIES & CODE

RecyclerView-FastScroller

Kotlin写的快速滑动的滚动条,按照首字母.

vector-analog-clock

Vector实现的石英表,适配各种屏幕.

androme

可以将带JS的HTML5页面转换为多个Android Layout.

android-UniversalMusicPlayer

Google重写的UAMP

LazyDatePicker.

替代系统DatePicker的一个第三方组件.

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

  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. linux中find的用法

    找所在目录的文件用 find -name “file*” -print  #注意不要用加文件路径,查找文件也好用双双引号括住: 也可以 find ./ -name “file*” -print

  2. Android中的Telephony学习笔记(2)

    上一篇文章中学习了android.provider中Telephony类. 这一篇文章学习android.telephony包中的类,这些类是android提供给上层调用的API. 为监測基本电话信息 ...

  3. 阿里云 RDS实例间的数据迁移

    使用数据传输DTS可以实现两个RDS实例间的数据迁移.对于支持增量迁移的存储引擎,还可以使用DTS在源RDS实例不停服的情况下,将数据迁移到目标RDS实例.目前对于RDS不同存储引擎,只支持同构迁移( ...

  4. (七)jQuery中的DOM操作

    一.jQuery的DOM操作 (1)查找节点: 查找元素节点: 1. 获取指定的标签节点 $(“上级标签 标签:eq(“标签索引”) ;  如:var li = $("ul li:eq(2) ...

  5. C#中的Dictionary字典类常用方法介绍

    using System.Collections.Generic;//引用命名空间//Dictionary可以理解为散列集合 public class DictionaryTest { public ...

  6. spring中的异步事件

    这里讲解一下Spring对异步事件机制的支持,实现方式有两种: 1.全局异步 即只要是触发事件都是以异步执行,具体配置(spring-config-register.xml)如下: Java代码   ...

  7. JavaScript实现对象数组按不同字段排序

    如果有一个对象数组,我们想要依据某个对象属性对数组进行排序.而传递给数组sort()方法的比較函数要接收两个參数,即要比較的值.但是.我们须要一种方式来指明依照哪个属性来排序.要解决问题,能够定义一个 ...

  8. Away3D引擎学习笔记(一)资源加载解析块

    前文:Away3D断断续续用了一段时间了,三维相关的很多算法,计算转换还是有点绕,整理些自己觉得还有点意思东西,希望大家有用. 三维开始,Away3D构架你场景那几行代码各处都有,这里就不copy了, ...

  9. caffe编译的问题 找不到opencv的 tiff库文件

    解决办法:    sudo  su cmake  .. make  -j8 make  pycaffe make  install 问题解决. 看起来是权限问题导致.

  10. 通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明。

    错误原因: xml文件中,本来是要配置成下面这样的: http://www.springframework.org/schema/context http://www.springframework. ...