Android Weekly Notes Issue #232

Android Weekly Issue #232

Android Weekly Issue #232
本期内容包括: Kotlin的优势讨论; MVVM模式结合RxJava和Retrofit的应用构架实现; Android中传感器使用; 如何给App写单元测试; Reductor的组合使用; Android应用进程被杀死的状态恢复和问题处理; Kotlin中的Anko; 后台任务处理库"Android Job"; VectorDrawable和PNG的使用问题等.

本期开源库: 给ImageView和RelativeLayout的底部加曲线; 长按弹框; Switch Button控件; 给View加深度/厚度的库.

ARTICLES & TUTORIALS

How Kotlin became our primary language for Android

作者他们team想要完全用kotlin开发一个应用.
本文是他们的心得体会.

关于函数式编程的学习, 作者推荐: 一个Scala的课程.

Kotlin的优势: 和Java可以互相调用; 函数式语言; function purity; 高阶函数(函数可以作为参数或返回值); 不可变性(val); Null-safety; Anko; Kotlin Android extensions(移除了ButterKnife); 还有对初学者很友好, 可以摆脱很多第三方的依赖, 函数扩展等等优势.

RxJava 2: Android MVVM Lifecycle App Structure with Retrofit 2

作者一年多以前写过一个这个文章: RxJava: Android MVVM App structure with Retrofit, 介绍MVVM结合Retrofit和RxJava的App架构模式. 此篇文章是一年后作者对此的改进.

主要内容有:

    1. 通过View和ViewModel之间的协议接口, 让ViewModel知道View的生命周期变化.
    1. RxJava2的流式类型: Completable, Maybe, Flowable的使用.
    1. 用RxJava操作符组合网络请求: 让不同的网络请求一起发送, 并且都返回以后才得到通知 -> 用.zip(). 顺序连接不同的网络请求 -> .flatMap(), .andThen().
    1. 后台网络请求和View更新的处理: 不取消网络请求, 等View再次resume的时候检查状态再更新. 这里提供了两种选择, 一种是用前面提到的协议接口中的生命周期方法, 另一种是用AsyncProcessor.
    1. Mock Retrofit的网络请求.

Tech Talks - You Do Have Something To Say!

这篇文章鼓励你分享你的知识, 经验, 问题及解决方法, 无论是通过演讲还是写出来的方式.

Da Real Fragmentation - Sensors

介绍了Android中传感器的使用.

Simple unit tests for Android

如何给你的App写简单的单元测试.

Reductor - Redux for Android. Part 2

这是系列文章中的一篇, 继续讲Reductor library – Redux的Android版实现.

这篇文章结合例子将如何组合使用以及用@CombinedState来生成代码.

Android process death — and the (big) implications for your app

本文探讨进程被杀死有可能导致的种种问题.

你的Android应用如果在paused或者stopped状态, 那么它任何时候都有可能会被系统杀死. 这时候你的Activity, Fragment和View状态将被保存, 当你回到应用的时候, 系统会重新启动进程, 重新创建Activity, 存储的状态会在bundle中返回.

这个过程存在一个问题: 整个进程都被杀死了, 所有单例(或application scope的对象), 临时数据, 还有retained Fragment中的数据, 这些所有都会处于一种全新创建的状态, 但唯有一个不同, 一些在bundle中存储的状态被恢复出来了.

这样有可能会导致一些异常, 比如你的界面想要恢复一种状态, 但是数据已经被清空了.

如何测试这种情况呢?

  • 使用App, home键把它放进后台, 杀死app, 再恢复.
  • 打开选项"Don't Keep Activities". 这种测试并不会杀死进程, 只会测试Activity的状态恢复.
  • 设置Developer options中的Background Process Limit为"No background processes". 这样把应用放在后台, 打开另一个应用, 再回来自己的应用, 将会重启进程.

相关问题信号

  • 单例
  • 保存可变数据的共享的实例
  • Application类中保存的数据和状态
  • 可变的静态字段
  • Retained fragments(状态恢复了, 但是数据却丢失了)
  • 基本上任何没有在onSaveInstanceState()中保存但是你却依赖的状态

这些问题没有唯一的解决方案, 取决于你的应用.

400% faster layouts with Anko

作者把自己的一个布局改为用Kotlin的Anko, 然后测试性能.

好处是:

    1. 性能提升了, 避免了XML的运行时解析所花费的时间.
    1. 可以动态地加入逻辑, 比如版本判断, 屏幕尺寸, 方向判断等.

作者用的测试性能的工具是: AndroidDevMetrics

Background Work with Android Job and Dagger

在Android上的后台工作, 你可以选择Alarm Manager, Job SchedulerGCM Network Manager.

为了帮开发者从每种实现中抽象出来, Evernote开源了一个库: Android Job. 本文介绍了这个库如何使用.

VectorDrawable PNG

作者他们的应用中有VectorDrawable的版本兼容问题, 用support library中的Compat版本也不好使, 于是他们在旧版本决定使用自动生成的png.

然后发现了生成png的颜色设置问题, 在旧版本生成的图片用的是fillColor而不是tintColor. 把fillColor设置成想要的颜色即可.

DESIGN

Depth Library by Daniel Zeller

一个应用, 展示了Depth-LIB-Android-的功能.

LIBRARIES & CODE

Crescento

ImageViewRelativeLayout底部加上曲线的库.

LongPressPopup

长按出现弹框的库.

RMSwitch

一个Switch Button的库, 带有更多自定义扩展功能.

Depth-LIB-Android

这个库给View加上深度/厚度.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • 原文链接:https://github.com/opendigg/awesome-github-android-u...
    IM魂影阅读 32,777评论 6 472
  • 从小,我就被大人们称为“爱臭美的小丫头”。当时的我非常疑惑:美不应该是香的吗?怎么在大人的口中就变成臭的了?后来长...
    高桥美莎阅读 1,089评论 6 28
  • 这世间你唯一能做好的事,就是你自己想做的事。 否则,如果你只是追求别人口中的成功,你终将一败涂地。 你可以跟随着别...
    刘莘静阅读 207评论 0 2
  • 四公子晚晴,一如其在七公子中的排行居于正中一般,性格也综合了诸位的特点不甚冰冷亦不甚温热,与其他六人的关系,只怕是...
    24e2f6668318阅读 335评论 0 0