June 24th, 2018

Android Weekly Issue #315

本篇内容包括,Android P的优先级队列管理,Yelp性能测试系列最后一篇帧率监控,以及近期比较火的Airbnb下一步移动战略,还包含连接Clould IoT Core的Library介绍,ML Kit文字识别,与如何从AndroidJob迁移到WorkManager.还有一篇如何搭建面试机器人的介绍,以及尚在早期的Kotlin Native跨平台数据库的概况等.

ARTICLES & TUTORIALS

Exploring Android P: Priority Buckets

这次Google IO Android P推出了Priority Buckets来提供更好的电池管理.

通过使用频率,将App分为Active,Working Set,Frequent,Rare,Never几个级别, 不同级别会对Jobs还有Alarms有不同的最大延时.

分组是动态改变的.

My checklist for fixing build issues

作者的AndroidTest里面Import都无法识别了,提示Cannot find symbol,解决办法是清掉一些缓存.

包括本地Gradle,Project idea与gradle,以及AS的Cache…而后解决了.

Understanding the emotions of users through NLP

作者讲解了通过Firebase functions platform + Google Cloud Natural搭建一个App的客服系统.

Introducing Billingx

Google唯一渠道实现App内购买的API就是Billing Library,但是对于测试者来说使用起来很麻烦,而且直到2018 Google I/O也没有新的动作.

之前也分享过一个叫做Register,通过Mock,实现了本地的测试,但是会在Production Apk中引入没必要的代码.

作者自己封装了一个叫BillingX的库,提供了空实现给Production版,通过releaseImplementation引入.

Text Recognition with ML Kit

介绍了这次ML Kit中的云端文字识别API,通过Firebase服务Enable,可以实现图片中文字的in-cloud text recognition,不想掏钱可以试用哦,选择Blaze Plan按需缴费,头1000次请求免费的.

Publishing your Android, Kotlin or Java library to mavenCentral

大家平时常用的Chris Banes的脚本要迁移到Kotlin上还要做一些改动,作者自己弄了一份,并且把它做成了plugin,只需要加到自己的plugin dependencies里面就行了.

Performance Improvements for Search on The Yelp Android App - Part 3

本篇为系列文章的最后一部分,主要介绍了CI上面的Performance如何检测系统帧率变化.

Yelp通过FrameMetrics API来获取帧率信息,低于16ms就是快帧,高于就是慢帧,他们会对装有信息的JSON进行分析,其中dopped frame会列出各个部分所消耗的时间.

最后又总结了整个性能提升过程中所采取的措施,除去这节的Performance Monitoring来防止Regression导致的问题,还包括之前的减少主线程工作,异步inflating layout,对搜索结果view model的caching等.

Android Things client library for Google Cloud IoT Core

为广大IoT爱好者带来福音,client library提供了硬件设备轻松连接google Cloud IoT Core,通过几行代码,便可以轻松的上传传感器信息到云端进行控制.

1
implementation 'com.google.android.things:cloud-iot-core:1.0.0'

由于硬件设备所在的环境多变,library还提供了很多错误处理机制,数据信息缓存等.

How to Migrate from Android-Job to WorkManager

作者以前用的是Evernote搞的AndroidJob,本篇介绍了他如何迁移到google最新的WorkManager上面.

基本使用方法跟AndroidJob类似,Woker通过OneTimeWorkRequestBuilder去build单发事件,通过PeriodicWorkRequestBuilder去build周期性事件,通过setInputData可以添加一些数据,通过setConstraints添加约束,如网络要求等,通过WorkManager.getInstance().enqueue讲Work加入队列.

Work触发时会执行doWork方法, 返回值Worker.Result.SUCCESS表示成功,类对象inputData可以获取传进来的数据.

What’s Next for Mobile at Airbnb

作者介绍了在Airbnb放弃RN之后下一步要走的路线.

  • 通过DSL定义跨平台统一的设计语言,实现Server-Driven Rendering,通过自己开发的基于Sketch的设计软件Lona做到一套设计生成不同平台的代码.当然这一切都是在Build的时候做的.
  • 基于之前的Epoxy,推出新的MvRx,并且支持Android与iOS,Android上是对RecyclerView的封装,可以更方便的实现复杂List的渲染.
  • 通过gradle product flavors来实现编译速度的提升,只去下载自己关心的Module.

SQLite on Kotlin/Native

Knarch, Kotlin跨平台数据库的一个非常早起的版本.很多地方还不成熟,尤其是对Android的支持,如何架构还在讨论总,在使用过程中,多线程也是个问题.

LIBRARIES & CODE

SaveState

保存状态的一个库,相较于Icepick支持Kotlin.

morph-bottom-navigation

基于Bottom Navigation的一个库,有比较好看的动画效果.

gradle-maven-publish-plugin

支持kotlin的maven发布插件.