Android Weekly Issue #278
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
- 利用lazy {} 来做延迟加载Field变量, 并重写去除了其本身的线程安全,提升速度
- 利用by实现delagate,把SpinnerAdapter的一部分功能交给ArrayAdapter来实现,自己只需要关注其特有回调即可.
- 给Activity添加Extension,将
ViewModelProvider.Factory
与其create
封装其中,使得创建ViewModel
简单又Lazy.
Database with Room using RxJava
文章比较简单,主要就是在Room
的Dao
定义的时候,query
的返回值可以直接声明为Flowable
,这样查询的时候就react
了,可以轻松的讲查询放在io
线程,写删改等操作数据库的方法直接用RxJava
直接封装即可,文章用的Completable
文章比较前沿,使用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
文章通过使用RxJava
的groupBy
与backpresure
来帮助我们更好的做一个同步的feature,保证远端与Local保持一致.
简单的说就是对同一个item的操作标注一个ID,本地把Add
与Remove
操作都记住,然后通过groupBy
配合backpresure
每次拿一个最新的Event,完成之后再继续拿,这样中间就会省掉很多重复的操作,大致以最后一次为准.
不过我觉得如果还有Update
操作,只拿后压后最后一个Event来处理了就不对了…
Demystifying Advanced Kotlin Concepts
介绍了不少Kotlin高级理念,如Lambda Exstension
,inline
与infix
function,等等.
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包在它里面.