Android Weekly Notes Issue #232
Android Weekly Issue #232
November 20th, 2016
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的生命周期变化.
- 2.RxJava2的流式类型: Completable, Maybe, Flowable的使用.
- 3.用RxJava操作符组合网络请求: 让不同的网络请求一起发送, 并且都返回以后才得到通知 -> 用
.zip(). 顺序连接不同的网络请求 ->.flatMap(),.andThen(). - 4.后台网络请求和View更新的处理: 不取消网络请求, 等View再次resume的时候检查状态再更新. 这里提供了两种选择, 一种是用前面提到的协议接口中的生命周期方法, 另一种是用
AsyncProcessor. - 5.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的运行时解析所花费的时间.
- 2.可以动态地加入逻辑, 比如版本判断, 屏幕尺寸, 方向判断等.
作者用的测试性能的工具是: AndroidDevMetrics
Background Work with Android Job and Dagger
在Android上的后台工作, 你可以选择Alarm Manager, Job Scheduler或GCM 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
在ImageView和RelativeLayout底部加上曲线的库.
LongPressPopup
长按出现弹框的库.
RMSwitch
一个Switch Button的库, 带有更多自定义扩展功能.
Depth-LIB-Android
这个库给View加上深度/厚度.
Android Weekly Notes Issue #232的更多相关文章
- 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的使用; ...
随机推荐
- angular中使用ngResource模块构建RESTful架构
ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...
- Phaser-游戏之旅
虽然这个小游戏逻辑不是很复杂,但为了熟悉Phaser这个游戏框架的使用方法所以就选择了它. 另外第一次在项目中尝试使用ES6,之后利用babel进行转换. 自动化构建:gulp(其他文件复制和解析) ...
- [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...
- Android开发-之监听button点击事件
一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...
- 我为NET狂官方面试题
基础牢不牢测一测便了解,工作没工作测一测便清楚,工作有几年测一测便知道 最近帮人过一遍C#基础,出了点题目,有需要的同志拿走 答案不唯一,官方答案只供参考,若有错误欢迎提出~ 更新ing 1.面向过程 ...
- Bucket不为空,请检查该Bucket是否包含未删除的Object或者未成功的Multipart碎片
异常处理汇总 ~ 修正果带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4599258.html 图示解决==>详细如下:
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- 火狐浏览器中event不起作用解决办法--记录(一)
今天遇到了这个问题.IE,谷歌下都没问题,但在FF下却不起作用,很郁闷查了半天,看别人博文写了老长,结果试了要么起作用,但太麻烦,要么不起作用,说了那么多跟没说一样. 其实只要这一句代码就行:e=ar ...
- Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...
- 结合阿里云服务器,使用FTP上传和下载文件,出现的问题和解决方案
一.FTP出现的问题 二.在网上找的方案 如果使用FileZilla默认设置连接ftp服务器的话可能会报以下错误: 错误: 无法建立数据连接:ECONNREFUSED - Connection ref ...