Android Weekly Notes Issue #256
Android Weekly Issue #256
May 7th, 2017
Android Weekly Issue #256
本期内容包括: 一个给ViewPager切换时加动画的库; Tail Recursion和它在Kotlin中的实现; MVI模式中的状态恢复; Dagger2的新API使用; 一个新的框架库Flax介绍.
代码部分包括: ViewPager加动画的库; 悬浮菜单; RxLoader结合RxJava和Loader实现数据加载; 一个封装BottomNavigationView的库, 使得状态切换类似于ViewPager.
ARTICLES & TUTORIALS
ViewPagerAnimator – The Basics
一个轻量级的库: ViewPagerAnimator. 本文介绍它的基本用法, 举了一个例子, 可以在切换pager的时候改变背景颜色.
Tail recursion and how to use it in Kotlin
尾部递归和它在Kotlin中的实现.
官方文档见: tail-recursive-functions. 关键字: tailrec.
Reactive with MVI Part 6 - Restoring State
使用MVI(Model-View-Intent)模式, 保持数据流的单向性, 会很大程度上简化状态恢复. 本篇就介绍怎么做和为什么.
这篇文章关注的状态分两种: 一种是memory中的状态(比如屏幕旋转时); 一种是persistent的状态, 即存在Bundle中的状态.
In Memory
对于Memory中的状态, 很简单, 我们只需要保证我们的RxJava流在Android组件生命周期之外仍然发送新的状态.
对于MVP来说, 这就是让Presenter在View的生命周期之外存活, 每当view重新attach到presenter上之后, 就按照前一个状态重新渲染. 只有当view完全被销毁了之后presenter才释放.
使用情形: 屏幕旋转, back stack回退.
Persistent State
在Android中通常用Activity.onSaveInstanceState(Bundle)来保存状态. 在MVI中View有一个render(state)方法, 所以一个显而易见的方法是让state实现Parcelable然后保存在bundle中.
结论
使用单向数据流和一个表达状态的Model以后, 很多和状态相关的事情变得很容易实现了.
但是通常处于两个理由, 不会把状态放在bundle里: 第一, Bundle有大小限制; 第二, 我们仅仅讨论了如何序列化和反序列化状态, 但恢复状态可能是另一回事.
Dagger 2: Android Modules
Dagger 2发布了新版本2.11-rc2.
在2.11中有新的API: @ContributesAndroidInjector.
本文介绍了新API相关的用法, 和之前的实现做了比较.
新的用法总结起来有以下三点:
- 继承
DaggerApplication来注入相关的dispatchers. - 在component中包含
AndroidSupportInjectionModule.class. - 创建一个bind方法, 用
@ContributesAndroidInjector标注.
Hello Flax — A Reactive Architecture For Android
当前Android中的一个趋势是创建reactive的app.
作者最初听说这个概念是从Flux. 后来看了一系列MVI模式的文章, 作者自己也做了一个MVI的尝试. 之后他就创建了Flax, 是一个轻量级的框架库(还在进一步开发中).
本文介绍了Flax库的使用, 基本可以总结为以下几点:
- Model作为唯一的状态真相.
- View只做无脑的渲染.
- Renderer接收Model变化的通知, 调用View的渲染方法.
- Responder接收用户交互事件, 调用Model的更新方法.
LIBRARIES & CODE
ViewPagerAnimator
一个轻量级的ViewPager动画库.
floatingMenu
一个悬浮的action menu, 点开后展开多个菜单选项.
RxLoader
一个轻量级的加载数据的库, 结合Loader和RxJava, 避免了内存泄露.
基本使用方法: 和你的Observable或者Single compose一下就好.
作者还有一篇文章详细介绍为什么他觉得他这个库很有必要: RxLoader: Lightweight, Boilerplate-Free Data loading with Loaders and RxJava.
AdaptableBottomNavigation
使用support库的BottomNavigationView的时候, 需要自己处理tab间的切换. 作者他们受到TabLayout的启发, 创建了一个ViewSwapper类, 可以简化BottomNavigationView的View管理, 有点像ViewPager的变种, 但去掉了滑动切换的功能.
Android Weekly Notes Issue #256的更多相关文章
- 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的使用; ...
随机推荐
- linux之date命令详解
date命令的用处 1.用于显示特殊的时间格式,可以用于对日志文件的命名 2.用于设置时间 ,不过这方面用的比较少,因为一般的服务器都设置的有自动同步网络时间 用法: date [OPTION]... ...
- 读书笔记 effective c++ Item 38 通过组合(composition)为 “has-a”或者“is-implemented-in-terms-of”建模
1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生.举个例子: class Address { ...
- formvalidation表单验证
官方文档:http://formvalidation.io var $formEntityProfileSearch = $("form[name=entityProfileSearch]& ...
- Unity - 通过降低精度减少动画文件的大小
Animation是Unity中的动画文件,主要内容由一个个关键帧数据构成.通过将Unity的资源序列化方式调整为Text,就可以以文本方式查看动画文件.通过菜单项Edit -> Project ...
- js华氏度转为摄氏度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- smartGWT DataSource数据动态加载
昨天和今天早上,用DataSource从数据库后台动态加载数据,我的业务是这样的: 我有两个SelectItem选择框,第一个选择框里面的数据是单位,第二个选择框中的数据是对应单位的人,因为人可能有重 ...
- MongoDB基础教程系列--第三篇 MongoDB基本操作(二)
1.集合操作 1.1.创建集合 MongoDB 用 db.createCollection(name, options) 方法创建集合. 格式 db.createCollection(name, op ...
- C#中如何给PDF添加可见的数字签名
数字签名广泛用于保护PDF文档,可见数字签名在日常生活中是相当重要的.在这篇文章中我将与大家分享如何给PDF文件添加可见的数字签名. 首先我下载了一个由E-iceblue公司开发的免费版的PDF组件- ...
- 老李推荐:第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览
老李推荐:第4章3节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...
- 手机自动化测试:appium源码分析之bootstrap十七
手机自动化测试:appium源码分析之bootstrap十七 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...