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

一个基于ConstraintLayoutRecyclerView显示时间线的View.

Kotshi

给JSON解析库Moshi写的支持Kotlin的库,不过我查了一下,Moshi已经有自己的了,叫moshi-kotlin.

Android Weekly Notes Issue #288的更多相关文章

  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. [动态规划]P1854 花店橱窗布置

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  2. SparseArray,SparseBooleanArray和SparseIntArray

    package android.util; import com.android.internal.util.ArrayUtils; /** * SparseArrays 利用integer去管理ob ...

  3. 撸起袖子加油干 golang入坑系列

    还是提醒一下,里面有段子,不都是技术. 冲着技术来的,慢走不送.没有版权,但可以给我发邮件(ztao8607@gmail.com) 在我的发小朋友中,终于最后一位打光棍的要结婚了. 说实话,真心不容易 ...

  4. You may rarely look at it. But you'll always feel it

    You may rarely look at it. But you'll always feel it

  5. 我的第一个python web开发框架(17)——产品管理

    这是后台管理系统最后一个功能,产品管理,它的接口与页面功能与上一章差不多. 获取产品列表接口 @get('/api/product/') def callback(): ""&qu ...

  6. C语言之成绩转换

    #include<stdio.h>int main(){int score,grade;scanf("%d",&score);grade=score/10;sw ...

  7. 如何搭建一个B2B电商的跨境系统网站?

    国内的B2B跨境电商系统开发定制如何做才符合标准?商家怎么搭建专属的电商供应链系统?目前并不是大多数电商行业的公司可以应对得起组建团队来做,下面分享下大概的建设供应链商城网站思路和步骤(以数商云跨境电 ...

  8. 初识分布式计算:从MapReduce到Yarn&Fuxi

      这些年,云计算.大数据的发展如火如荼,从早期的以MapReduce为代表的基于文件系统的离线数据计算,到以Spark为代表的内存计算,以及以Storm为代表的实时计算,还有图计算等等.只要数据规模 ...

  9. Linux多线程编程详细解析----条件变量 pthread_cond_t

    Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_ ...

  10. 深度解剖sesssion运行原理

    已经大半年没有更新博客了,一方面有比博客更重要的事情要做,另外一方面也没有时间来整理知识,所以希望在接下来的日子里面能够多多的写博客来与大家交流 什么是session session的官方定义是:Se ...