摘要:
为什么会有SingleLiveEvent 在 Android 开发中常用的一个JetPack的组件就是 LiveData,可以很方便地将数据和UI的生命周期结合起来,实现数据驱动UI更新。 然而使用 LiveData 有一个众所周知的副作用:LiveData的粘性事件,即当一个Observer去订阅 阅读全文
摘要:
捕获异常 Kotlin协程中执行的代码如果可能发生异常,最简单直接的办法也是可以通过 try-catch 语句来捕获异常 GlobalScope.launch { try { println(1 / 0) } catch (e: Exception) { //can catch exception 阅读全文
摘要:
挂起协程 在 《Kotlin 协程概览》 一文中,我们知道Kotlin协程可以被挂起从而让出线程资源。那么协程在什么情况下会被挂起?我们如何能够操作挂起一个协程? 在《Kotlin 协程概览》一文中我们知道在协程中调用 delay 函数可以将协程挂起,并且在一定时间后再次回到协程执行后续的代码。 G 阅读全文
摘要:
Kotin 协程的概念 Kotlin中协程是指一段可以被 挂起 的代码执行过程,类似于线程被挂起从而让出CPU资源,协程被挂起是为了让出线程资源,因此协程也可以被理解成是轻量级线程。 在此前《Java线程模型》 一文中,我们知道主流操作系统目前使用的都是内核线程模型,而协程即相当于实现了混合线程模型 阅读全文
摘要:
函数类型和高阶函数 Kotlin中的函数就像类一样,拥有函数类型、函数实例,并且可以作为方法的参数和返回值。将函数类型作为参数的函数或者返回值是函数类型的函数就称为高阶函数 。 (View) -> Unit val onClickListener : (View) -> Unit fun perfo 阅读全文
摘要:
object对象 在类名前直接使用 object 关键字即可声明一个类并且自动为该类初始化一个static的实例。 object Test { val TAG = "Test" fun test() {} } 在Kotlin代码中可以直接使用类名 Test 来访问其成员变量和方法,在Java代码中则 阅读全文
摘要:
Inline Class @JvmInline value class ErrorCode (code: Int) Kotlin中在类声明处使用 value 关键字即可声明一个Inline Class,Inline Class的主构造函数有且仅有一个参数。后续对Inline Class对象的使用,在 阅读全文
摘要:
Data Class Kotlin中的Data Class主要用于封装和持有数据,作用类似Java中的POJO对象。 data class User(nickname: String, sex: Int, age: Int) 在class之前加上 data 关键字即可声明一个Data Class。 阅读全文
摘要:
协变与逆变 现在假设存在类A和类B,以及泛型类LIst<A>和泛型类LIst<B>,则协变和逆变的定义如下: 协变 如果A是B的子类,且List<A>是List<B>的子类,那么可以说泛型List<T>是协变的 逆变 如果A是B的子类,且List<B>是List<A>的子类,那么可以说泛型List< 阅读全文
摘要:
Sealed Class Sealed Class即密封类,使用sealed关键字修饰一个类即表示该类是密封类。 sealed class Error 密封类的一个主要特点是其只有有限个子类型,其所有的子类型在编译期就能够全部枚举出来。 从这一个特点上看,密封类有点像是枚举类型。但和枚举类型所不一样 阅读全文