Android Weekly Notes Issue #276
September 24th, 2017
Android Weekly Issue #276
本期内容包括LifeCycle与Architecture的相关文章,以及新的JSON解析库Moshi的介绍,还有
ConstraintLayout的一些特性,还包括一个加速你Debug的小技巧,喜欢数据库的也不容错过,有介绍Realm,Room,ObjectBox,Anko SQLite等等的对比与分析的文章哦.
ARTICLES & TUTORIALS
Is your Android Library, Lifecycle-Aware?
还在为必须在固定的生命周期里处理你的init与destroy吗, 文章介绍了通过google最新的LifeCircle库来实现自主监听.
你只需要引入相关依赖.
implementation "android.arch.lifecycle:runtime:1.0.0"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha9-1"
然后让你需要关注生命周期的类继承于LifecycleObserver.
这样你就可以通过注解来监听生命周期了.
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
or
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
..and so on
当然别忘了需要注册.
getLifecycle().addObserver(LifecycleObserver);
与
getLifecycle().removeObserver(LifecycleObserver);
Creating a Custom Type Adapter for Moshi
文章介绍了如何给JSON解析库Moshi添加一个自定义的Adapter来完成非1:1的Json2Object的解析, 主要逻辑在于实现了@FromJson的方法.
class StageAdapter {
@FromJson fun fromJson(jsonReader: JsonReader, delegate: JsonAdapter<Stage>): Stage? {
val value = jsonReader.nextString()
return if (value.startsWith("in-progress")) Stage.IN_PROGRESS else delegate.fromJsonValue(value)
}
}
把所有的以in-progress开头的都转换成Stage.IN_PROGRESS.
Register: Better In App Billing Testing on Android
介绍了开发的一个框架Register用来帮助使用Google In-App Billing开发应用的人来进行测试, mock掉Server.
原因是Google API必须是内嵌在Play Store上线的应用里, 去订阅一个已经上线的应用, 而且必须使用开发上号来进行购买测试, 并且重复测试也受到限制, 因为取消之前的购买是唯一的方式, 但是需要等很久状态才会被Reset.
ConstraintLayout - Guidelines, Barriers, Chains and Groups
介绍了ContraintLayout的一些新的特性, 包括Guidelines, Barriers, Chains 跟 Groups.
Repository layer using Room and Dagger 2
文章介绍了如何搭建MVP中的M层, 源自Google的MVP套路, Presenter持有一个Repository,而Repository里面持有的对应数据的DataSource,用来真正操作数据的IDUQ, 而DataSource内部是通过Room Persistence来实现的.
Stop testing on emulators - Access Real Devices
一个云端真机测试的广告.
Realm, ObjectBox or Room. Which one is for you?
文章介绍了根正苗红新秀Room Persistence, 成熟稳重Realm, 与没什么人听过的ObjectBox三个数据库的优劣.
- 如果你关心安装包体积与方法数, 用
Room - 如果你关心速度与效率,那么用
ObjectBox - 如果你嫌
ObjectBox不够成熟稳定,那就使用七年老大哥Realm
Making the most out of Android Studio Debugger
常常调试的时候,你只想看看程序里某个地方运行时候的值,或者想测试新加的一段逻辑是否正常(可以Debug时跑在Evluate的环境里),你完全可以不编译程序,但是默认的情况下你Ctrl+R运行却需要等Gradle跑好久,非常恼火.
文章介绍了个小技巧, 自己创建一个Build选项, 让IDE不再去做Gradle编译, 只是单纯运行程序,想知道怎么弄么,进去看看就知道了.
Kotlin Testability – Part 2
文章继续上次的套路,将同样的方法运用在一些Android Framework组件上也是可以的.
开启
testOptions {
unitTests.returnDefaultValues = true
}
后相关Framework的方法也会调用Stub的.
作者最后强调使用Factory封装接口是因为有多个需要Mock的对象,如果只有一个第三方组件需要Mock,我们可以直接通过internal primary用于测试与secondary用于production的办法来玩.
Building a Guitar Chord Tutor for Actions on Google: Part Two
继续了上次的项目,通过Actions on Google实现吉他和弦教程APP
Stress-free SQLite with Anko
推荐了一个SQLite的包装库,纯Kotlin的,叫做Anko SQLite, 看了下官网居然还有一个叫Anko Layout的库,使用办法都是Lambda.
database.use {
// 增删改查
}
From design to android, part 2
介绍了由设计入手来做Android动画的思想,介绍了通过Skech+Shape Shifter制作Vector图片,然后通过Android的AnimatedStateListDrawable设置给ImageView当资源,最后通过ImageView#setImageState来控制显示哪个State下的Vector动画
LIBRARIES & CODE
RxLifecycle
关于流式控制逻辑在相应的生命周期里完成,防止内存泄露的一个库.
Anko
一系列Kotlin的框架,让Android开发更简单更快捷,挺厉害的样子.
Register
帮助测试PlayStore Billing的一个框架
Moshi
解析JSON的一个库,通过实现一个Adapter可以轻松做原始数据到Model之间的转换.
Android Weekly Notes Issue #276的更多相关文章
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- Android Weekly Notes Issue #236
Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...
- Android Weekly Notes Issue #235
Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...
- Android Weekly Notes Issue #234
Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...
随机推荐
- 字符串匹配算法系列一:KMP算法原理
本文主要参考了https://mp.weixin.qq.com/s/rbaPmBejID8-rYui35Snrg的表述,加上部分自己的理解 学习任何算法都要了解该算法解决什么问题?我们看看KMP算法主 ...
- Python--图像处理(2)
skimage提供了io模块,顾名思义,这个模块是用来图片输入输出操作的.为了方便练习,也提供一个data模块,里面嵌套了一些示例图片,我们可以直接使用. 引入skimage模块可用: 1 from ...
- mongodb文档的CRUD
本章会介绍对数据库移入或者移出数据的基本操作 向集合添加文档 从集合删除文档 更新现有的文档 为这些操作选择合适的安全级别 添加删除数据库 添加数据库 :use foo 如果存在foo 就use ...
- 学习已经被淘汰的flash
一.基本知识介绍 网站动画的分类:二维动画和三维动画 二维动画分类: 1.GIF动画 2.flash动画 flash软件:是矢量软件 选中带有点,并且可以任意变形的对象,叫形状 逐帧动画:在时 ...
- vue v-for与v-if组合使用
当它们处于同一节点,v-for 的优先级比 v-if 更高,这意味着 v-if 将分别重复运行于每个 v-for 循环中.当你想为仅有的_一些_项渲染节点时,这种优先级的机制会十分有用,如下: < ...
- uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 在nesc的代码中,你会看到非常多你不认识的数据类型,比方uint8_t等.咋一看.好像是个新的数据类 ...
- 强大易用的日期和时间库 Joda Time
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成,并且它是线程安全 ...
- python etree解析xml
# -*- coding:utf-8 -*- #conding:utf-8 __author__ = 'hdfs' ''' 简洁 高效 明了 ElementTree轻量级的 Python 式的 API ...
- Docker入门系列5:常见问题小结
重启容器 再次运行容器: docker start container_id 然后 docker attach container_id 就可以继续下命令了. [编辑]命名 --name [编辑]端口 ...
- Makefile浅尝
[0]README makefile定义: 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要一先编译,哪些文件需要后编译,哪 ...