Android Weekly Notes Issue #288
Android Weekly Issue #288
December 17th, 2017
Android Weekly Issue #288
本期内容主要包括介绍Kotlin DSL使用kotlin来写gradle,如何组织Session,以及MVP如何通过LifeCycler来简化,如何让多个presenter之间相互交互.
特别推荐的有如何使用kotlin优化多方法的接口,有多达四种方法,是学习kotlin lambda优化的好机会,以及如何使用kotlin架构跨平台应用.
代码部分有趣的是一个可以画dagger依赖关系的库,但还支持的不完善,以及西班牙人封装Espresso的一个库,叫Barista
.
ARTICLES & TUTORIALS
How to develop image gallery app in Android using Kotlin
作者分析了自己用kotlin写的一个相册应用,里面用了很多kotlin相关的知识.
The Power of Gradle Kotlin DSL
文章介绍了作者将本来groovy
的gradle.build改成了使用kotlin.dsl
写的gradle.build.kts,做到用kotlin来写gradle,是不是很嗨森.
How to host a conference within your team
教你如何组织公司内部的session,首先通过表单收集话题,然后对话题进行投票,然后根据话题的多少指定break,呵呵,感觉外国人真的是很天真烂漫~~~
Using Architecture Components with Firebase (part 1)
文章用Firebase Realtime
来讲解如何通过Architecture Component
将程序重构成成MVVM架构,将Firebase数据库封装成LiveData
并放在ViewModel
里,这样生命周期与activity绑定,也利于测试.
Task Stack
文章介绍了通过解决通过Notification打开某activity,但后退直接退出而不是回到上一级的用户体验问题.
即通过TaskStackBuilder
来创建具有parent activity的pending intent.
具体可以看代码,作者没有提到,如果在manifest里面声明了,还可以使用NavUtils
来简化一些流程.
MVP & Lifecycles & Dispatchers Oh My!
文章介绍了MVP的实际应用,我觉得除了大家所熟知的一些基本思路,这里有两点值得说道说道.
一是通过Presenter订阅Lifecycle
,可以自动实现onAttach与onDetach.
二是实现一个Dispatcher
,为所有presenter持有.内部是一个PublishSubject
,不同presenter的方法通过ofType
监听自己关注的的state
,不同模块的presenter之间通过publish state
相互通信.
Listeners with several functions in Kotlin
文章介绍了如何使用好的方法在kotlin里处理多方法的接口.并以大家熟知的Animator.Listener举例子.
这个四个方法的接口,如果我们只希望实现一个,最直接的方法就是使用AnimatorListenerAdapter
,但是它是一个抽象类,继承该类就不能继承别的类了.
第一种解决方法就是kotlin的interface支持写code,所以自定义的没必要是一个抽象类而还是一个接口,所有的方法赋值= Unit
即可.
第二种方法是使用Exstension,给ViewPropertyAnimator
写扩展,参数是(Animator)->Unit
,而在内部实现AnimatorListnerAdapter
,然后将其回调中的参数通过我们扩展方法的Lambda返回,由于内部套用回调,为了实现整体扩展方法的inline,参数(Animator)->Unit
需要加crossinline
标识.
inline fun ViewPropertyAnimator.onAnimationEnd(crossinline continuation: (Animator) -> Unit) {...}
第三种方法是基于第二种,传入四个lambda参数((Animator)->Unit
),使用了named argument
特性,并都赋默认值{}
,这样想实现哪个,就指定名字即可.
第四种使用了Lambda with Receiver
,或者交Extension function lambda
,最kotlin的一种封装,扩展方法setListener的参数是AnimListenerHelper.() -> Unit
,而AnimLisnerHelper本身实现了所有Animator接口的四个方法,并提供四个方法将(Animator)->Unit
作为参数保存在Helper类内,代理给之前override Animator的四个回调.
view.animate()
.setListener {
onAnimationStart {...}
onAnimationEnd {...}
}
Architecture for Multiplatform native development in Kotlin
文章介绍了使用kotlin实现跨平台应用的架构思想,通过Kotlin/Jvm,Kotlin/JS,以及正在beta研发阶段的Kotlin/Native,可以实现横跨backend到所有前端设备的庞大系统,而整体又基于MVP的思想.
由上之下大概的分层是
common (DataModel)
common-platform (平台相关DomainModel, 使用Kotlin Multiplatform的require/actual
)
common-client (MVP抽象)
common-client-repo-platform (平台相关的Repo)
views (不同平台的view实现)
对于iOS与Android,又会在view之上抽象出来一层为watch
,tv
,car
,phone
等公用.叫做Common Android/iOS Elements
.
是不是很六百~.
Testing RxJava code made easy
RxJava2提供了test observable,可以通过Observable.test
进行各种assert.
LIBRARIES & CODE
daggraph
画dagger依赖图的,但是还有不少不支持的,如Construtor Inject
等等.在开发中.
Cipher.so
很好用的native加密库.
Barista
封装了Espresso,简化了很多API的使用.
artist
可以给View里面添加方法的一个插件,如添加一些判断Visibility的方法.
TimeLineView
一个基于ConstraintLayout
与RecyclerView
显示时间线的View.
Kotshi
给JSON解析库Moshi写的支持Kotlin的库,不过我查了一下,Moshi已经有自己的了,叫moshi-kotlin
.
Android Weekly Notes Issue #288的更多相关文章
- 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的使用; ...
随机推荐
- 深入理解js中的apply、call、bind
概述 js中的apply,call都是为了改变某个函数运行时的上下文环境而存在的,即改变函数内部的this指向. apply() apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作 ...
- tpshop使用自带极光推送
推送逻辑在common里面的PushLogic.php;在后台网站->商城设置->推送设置,将极光的ID,密码填一下系统会自动加入数据库里面. 在你所需推送的PHP类里面引用这个文件即可. ...
- SurfaceView 使用demo 飞机游戏小样
本demo 主要使用了surfaceview 画图. 1.在线程中对canvas操作. 2.实现画图 3.surfaceView 继承了view 可以重写ontouchevent方法来操作输入. 代码 ...
- day02HTML_CSS
掌握表单标签 <form action="http://www.baidu.com" method="post"> ... </form> ...
- HTML 使用jQuery选中复选框 简易版
<html><head> <meta charset="utf-8"> <script src="jquery-1.7. ...
- 在Eclipse中写web工程 发现import javax.servlet.http.HttpSession无法引入
解决方法 得加入tomcat的jar包,右击项目->build path-add libraries->server Runtime->选择要导入的tomcat 就可以了,如果没有选 ...
- 第四届河南省ACM 节能 区间DP
1001: 节 能 时间限制: 1 Sec 内存限制: 128 MB 提交: 21 解决: 9 [提交][状态][讨论版] 题目描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多 ...
- SketchMaster 隐私政策
隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...
- 树的平衡 AVL Tree
本篇随笔主要从以下三个方面介绍树的平衡: 1):BST不平衡问题 2):BST 旋转 3):AVL Tree 一:BST不平衡问题的解析 之前有提过普通BST的一些一些缺点,例如BST的高度是介于lg ...
- maven项目pom.xml配置文件依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...