Android Weekly Notes Issue #288

综合技术 2017-12-31

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
.

博客园精华区

责编内容by:博客园精华区 (源链)。感谢您的支持!

您可能感兴趣的

Android-Handler 消息机制 Handler的使用场景:有时候在子线程中进行耗时的 I/O 操作,在操作完成会需要对UI进行改变,由于Android开发机制限制,我们并不能在子线程修改UI,否则会抛出异常。这个时候可以将更新UI操作通过Handler切换到主线程完成。 以上涉及到的几个概念: ...
Eclipse Android – Strange Error with try &am... i wanted to programm an app for android, but i get an error with my code and i don't understand what should be wrong with it. Because i'm new here ...
【Android笔记】设计模式(零)- 面向对象的六大原则... 本文内容基于《Android源码设计模式解析与实践》 1.单一职责原则(Single Responsibility Principle,缩写SRP) 单一职责原则,就一个类而言,应该只有一个引起它变化的原因。简单说,一个类应该是一组高度相关的函数、数据的封装;也就是高内聚。 ...
Android鬼点子-不用百行代码,让文字闪闪发光... 想做一个让文字有类似金属光泽效果的动画。效果如下: 分享一下实现思路,使用kotlin实现。 需求是需要有很好的移植性,可以修改设置光泽颜色,光泽宽度,光泽速度,光泽角度。 最后的结果是只要一行代码即可调用: start_bt.setOnClickListener...
ViewModels 简单入门 两年前,我在做 给 Android 入门的课程 ,教零基础学生开发 Android App。其中有一部分是教学生构建一个简单 App 叫做 Court-Counter . Court-Counter 是一个只有几个按钮来修改篮球比赛分数的 App。最终的App有一个bug,如果你旋转手机,当...