October 8th, 2017

Android Weekly Issue #278

本周内容主要包括两篇涉及Kotlin高级用法的文章,RXJava解决本地与远端存储的冲突,应该如何选择模拟器来测试,Paging Library的使用等等.

代码部分值得看的是Kolin相关的文章.

ARTICLES & TUTORIALS

MidiPad – Tricks With Kotlin And Architecture Components

文章介绍了如何利用Kotlin的特性来结合Google Architecture Component进行开发.

其中有三个Trick

  1. 利用lazy {} 来做延迟加载Field变量, 并重写去除了其本身的线程安全,提升速度
  2. 利用by实现delagate,把SpinnerAdapter的一部分功能交给ArrayAdapter来实现,自己只需要关注其特有回调即可.
  3. 给Activity添加Extension,将ViewModelProvider.Factory与其create封装其中,使得创建ViewModel简单又Lazy.

Database with Room using RxJava

文章比较简单,主要就是在RoomDao定义的时候,query的返回值可以直接声明为Flowable,这样查询的时候就react了,可以轻松的讲查询放在io线程,写删改等操作数据库的方法直接用RxJava直接封装即可,文章用的Completable

##Create a Clean-Code App

文章比较前沿,使用Architecture Component开发了一个天气应用,亮点在于用Kotlin实验室的Kotlin Coroutines取代了RxJava,核心逻辑在用suspendCoroutine把Retrofit的异步操作转换为suspend function.相关Coroutine的Doc可以在这里找到.

12 Practices every Android Development Beginner should know

看名字就知道了,一些小常识,但是这个是Part1,只有10条,感兴趣的可以看看.

Check out local storage and RxJava backpressure

文章通过使用RxJavagroupBybackpresure来帮助我们更好的做一个同步的feature,保证远端与Local保持一致.

简单的说就是对同一个item的操作标注一个ID,本地把AddRemove操作都记住,然后通过groupBy配合backpresure每次拿一个最新的Event,完成之后再继续拿,这样中间就会省掉很多重复的操作,大致以最后一次为准.

不过我觉得如果还有Update操作,只拿后压后最后一个Event来处理了就不对了…

Demystifying Advanced Kotlin Concepts

介绍了不少Kotlin高级理念,如Lambda Exstension,inlineinfixfunction,等等.

Genymotion vs Android Emulator

通过数据对比,得出X86 with google api的模拟器性价比最高.

Kotlin Function Literal with Receiver

介绍了Kotlin的Lambda Exstension特性, 函数本体作为参数被访问,并函数本体内可以访问函数的Receiver.

Architecture Components: Paging Library

文章介绍了使用Paging对读取大量数据显示List的帮助.

注意PagedList#setEnablePlaceholders设置为true当滚动速度大于读取速度onBind中获取的item可能会是null,当数据再次加载时会重新再被调用.如果设置为false,则会跳过null的item,但是滚动条会抖动,建议隐藏滚动条.

The Care and Feeding of Elephants

Evernote推出了最新的android-job-lib-1.2.0,这个库主要是封装了AlarmManager(pre 5.0),JobScheduler(after 5.0),GcmNetworkManager(device with Google Service),让你通过统一的API来做run tasks.

Fast and lazy .apk distribution with Crashlytics

文章介绍通过git获取最新Tag到上一个Tag之间的Log生成Release Note,然后通过Crashlytics(Fibric)来分发.

LIBRARIES & CODE

diagonal-imageview

一个帮助你斜着切图片的ImageView

purrge

node的一个库,可以通过命令轻松删除手机里面的程序

ScalingLayout

一个可以做出来Scaling效果的Layout,需要将你的Layout包在它里面.