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.

dagger2的changelog.

本文介绍了新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的更多相关文章

  1. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  2. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  3. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  6. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  7. Android Weekly Notes Issue #236

    Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...

  8. Android Weekly Notes Issue #235

    Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...

  9. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...

随机推荐

  1. java对String进行sha1加密

    1.使用apache的codec jar包对string进行加密,先下载并引入jar包: http://commons.apache.org/proper/commons-codec/ 2.生成: S ...

  2. TCP协议之三次握手与四次挥手

    TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张T ...

  3. cuda编程学习5——波纹ripple

    /共有DIM×DIM个像素,每个像素对应一个线程dim3 blocks(DIM/16,DIM/16);//2维dim3 threads(16,16);//2维kernel<<<blo ...

  4. Hive 伪分布式下安装

    本安装过程只作为个人笔记用,非标准教程,请酌情COPY.:-D Hive下载 下载之前,需先查看兼容的Hadoop版本,并安装hadoop,参考 http://www.cnblogs.com/yong ...

  5. (转)Nginx + uwsgi + web.py + MySQLdb

    一.背景知识: Web服务器上有多种方式运行Python: 传统上的CGI方式:基本已被淘汰 mod_python的模块方式:仍在广泛使用,但生产环境中也被逐步淘汰 uwsgi方式:目前生产环境下最受 ...

  6. formvalidation表单验证

    官方文档:http://formvalidation.io var $formEntityProfileSearch = $("form[name=entityProfileSearch]& ...

  7. 20155231 2016-2017-2 《Java程序设计》第5周学习总结

    # 20155231 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 学习目标 理解异常架构 掌握try...catch...finally处理异常的方法 会 ...

  8. 老李分享:Web Services 组件 1

    老李分享:Web Services 组件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9 ...

  9. 测试开发Python培训:模拟登录新浪微博-技术篇

    测试开发Python培训:模拟登录新浪微博-技术篇   一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...

  10. cassandra高级操作之JMX操作

    需求场景 项目中有这么个需求:统计集群中各个节点的数据量存储大小,不是记录数. 一开始有点无头绪,后面查看cassandra官方文档看到Monitoring章节,里面说到:Cassandra中的指标使 ...