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 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加上深度/厚度.

Android Weekly Notes Issue #232相关推荐

  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 #226

    Android Weekly Issue #226 October 9th, 2016 Android Weekly Issue #226 本期内容包括: 用Firebase做A/B Test; 用R ...

  3. Android Weekly Notes Issue #220

    Android Weekly Issue #220 August 28th, 2016 Android Weekly Issue #220 ARTICLES & TUTORIALS Manag ...

  4. Android Weekly Notes Issue #225

    Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...

  5. Android Weekly Notes Issue #218

    Android Weekly Issue #218 August 14th, 2016 http://androidweekly.net/issues/issue-218 ARTICLES & ...

  6. Android Weekly #30

    技术文章 过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章 深入探索 Flutter 性能优化 Flutter 作为目前最火爆的移动端跨平台框架,能够帮助开发者通过一套代码库高 ...

  7. Android Weekly #31:你最能影响「他者」的,是你正在工作的状态

    Part1技术文章 过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章 Android 编译优化系列-kapt 篇:kapt 可以理解为就是在 kotlin 开发场景下进行注解处 ...

  8. Android Weekly #38 :Android 13 正式发布

    Tips : 由于微信公众号外链限制,大部分文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者访问网页端或者知乎专栏 (点击原文即可) 技术文章 过去一周 Andr ...

  9. Android Weekly #37 :寻找知识的能力是一个非常重要的能力,如果找不到,你就只能等着别人来投喂...

    Tips : 由于微信外链限制,很多文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者访问网页端或者知乎专栏 (点击原文即可) 技术文章 过去一周 Android ...

  10. Android Weekly #32 - 面对畏惧之人,便说笨方法是行动的勇敢

    Part1技术文章 过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章 ASM 字节码插桩:进行线程整治[1]:京东零售技术 发表的一篇文章:AOP 技术在 APP 开发中的多场 ...

最新文章

  1. C#中Socket多线程编程实例
  2. OpenCV图像处理——对比两张图像差异的位置并标记
  3. 关于如何存储便于网上浏览的电子书籍
  4. QuickContactBadge--------------关联联系人-----------------------
  5. 数据库事务原理详解-事务的嵌套
  6. 人工智能化发展已经到了哪一步?
  7. 高分四号(GF4)——预处理(辐射定标、大气校正、正射校正、图像配准)
  8. Crystal Reports - Add Subreport
  9. 阿铭Linux_网站维护学习笔记20190306
  10. Python 智能银行卡识别系统的实现 (2)—系统的实现
  11. TMS320F28335项目开发记录5_28335之CCS编程基础
  12. 斑马打印机 android驱动,斑马ZC300驱动-斑马Zebra ZC300打印机驱动下载 v01.03.00官方版 - 51驱动网...
  13. ReactNative中国省-市-区WheelPicker组件
  14. android跳过网络连接,绕过Android Android的Wi-Fi热点5设备连接限制 | MOS86
  15. java一次能迈一级或两级台阶_有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?...
  16. 数据库云管平台将成为企业数字化转型的重要工具
  17. Qt实现天气信息显示和温度曲线绘制
  18. 光标跟随放大镜js特效代码
  19. CnOpenData中国发明公布专利信息申请数据
  20. SprinBoot整合MyBatis-Plus

热门文章

  1. Linux下mysql5.7.18登录报错“Access denied for user 'root'@'localhost' (using password: YES”)
  2. JSP标签,jsp:include,jsp:forward用法介绍及示例
  3. JSP指令:page指令,errorPage和isErrorPage
  4. 基于python的电商评论分析_Python实现爬取并分析电商评论
  5. 凸优化第五章对偶 5.5最优性条件
  6. 数据分析中会常犯哪些错误,如何解决? 五
  7. Raki的统计学习方法笔记0x1章:统计学习及监督学习概论
  8. Hugging Face Course-Introduction学习小记 (part2)
  9. 互联网时代的了解和未来的预期_互联网时代的四个特点你了解多少?
  10. Font Awesome入门教程