
Kotlin实战指南
文章平均质量分 82
Kotlin实战指南,由浅到深,步步推进
赵彦军
android开发工程师、烧菜能手、暖男
展开
-
Android 图片加载框架Coil使用总结
文章目录简介简单使用高斯模糊圆角圆形灰色变换 GrayscaleTransformationGif监听下载过程取消下载替换 okhttp 实例自定义Coil 源码分析简介Coil 是一个 Android 图片加载库,通过 Kotlin 协程的方式加载图片。特点如下:更快: Coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bitmap,自动暂停和取消图片网络请求等。更轻量级: Coil 只有2000个方法(前提是你的 APP 里面集成了 OkHttp 和 Co原创 2021-12-20 16:20:28 · 9928 阅读 · 0 评论 -
Kotlin reduce、fold
reduce从集合左到右,依次计算每个元素累加的结果示例1:val array = intArrayOf(1, 2, 3, 4, 5)val result = array.reduce { acc, i -> acc + i}Log.d("yyy-ppp", "$result") //结果:15示例2:val array = arrayOf("a", "b", "c", "d", "e")val result = array.reduce { acc, i -&g原创 2021-12-16 15:05:14 · 1925 阅读 · 0 评论 -
Kotlin重载运算符operator
定义运算符重载就是对已有的运算符赋予他们新的含义。重载的修饰符是operator。比如我们的+号,它的含义是两个数值相加:1+1=2。+号对应的函数名是plus比如我们定义一个类,如何才能使用 + 这个符号呢?其实也很简单,使用 operator 重载 plus 函数就能搞定,我们试试吧重载 plus首先我们定义一个类 Point ,然后重载 plus 函数class Point(private val x: Int, private val y: Int) { operator fu原创 2021-09-26 21:01:51 · 5552 阅读 · 0 评论 -
Kotlin密封类sealed
简介密封类用来表示受限的类继承结构:当一个值为有限几种的类型, 而不能有任何其他类型时。在某种意义上,他们是枚举类的扩展:枚举类型的值集合 也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。声明一个密封类,使用 sealed 修饰类,密封类可以有子类。sealed 不能修饰 interface ,`abstract classe(会报 warning,但是不会出现编译错误)密封类与枚举类对比① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 类与枚举类原创 2021-09-26 20:32:14 · 3371 阅读 · 0 评论 -
Kotlin by属性委托
在 Kotlin 中,通过 by 实现属性委托,属性委托 是什么意思呢?简单来说,就是属性的 set、get 的操作,交给另一个对象器完成。举个例子:class Example { var p: String by Delegate()}语法是: val/var <属性名>: <类型> by <表达式>。在 by 后面的表达式是该 委托, 因为属性对应的 get()(与 set())会被委托给它的 getValue() 与 setValue() 方法。原创 2021-08-26 21:33:18 · 1450 阅读 · 0 评论 -
Android Kotlin 协程async
转载请标明出处:http://blog.youkuaiyun.com/zhaoyanjun6/article/details/118085035本文出自【赵彦军的博客】往期精彩文章Android Coroutines ChannelsKotlin实战指南二十:flowKotlin实战指南十六:Synchronized、Volatile文章目录measureTimeMillis 统计一段代码耗时使用默认顺序使用 async 并发惰性启动的 async构建async 风格的函数measureTimeMil.原创 2021-06-21 20:38:20 · 4213 阅读 · 0 评论 -
Android Kotlin协程和Retrofit结合使用
Retrofit 正常使用先定义实体类class Repo(val id: String, val name: String)定义接口interface GitHubService { @GET("users/{user}/repos") fun listRepos(@Path("user") user: String?): Call<List<Repo>>}使用class MainActivity : AppCompatActivity() {原创 2021-06-21 14:16:56 · 1995 阅读 · 1 评论 -
Android Kotlin Coroutines ktx扩展
本篇文章主要讲的是,kotlin 协程在 ktx 上的扩展lifecycle 扩展对于 lifecycle 的扩展,已经在 以前的文章中讲过了https://blog.youkuaiyun.com/zhaoyanjun6/article/details/106413283主要的依赖implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"viewModel 扩展对于 viewModel 的扩展,已经在 以前的文章中讲过了https:/原创 2021-08-20 20:37:49 · 490 阅读 · 0 评论 -
Android ViewModel详解
视图与数据模型之间的桥梁ViewModelViewModel的生命周期会比创建它的Activity、Fragment的生命周期都要长。即ViewModel中的数据会一直存活在Activity/Fragment中。众所周知,由于Android平台的特殊性,若应用程序发送屏幕旋转的时候会经历Activity的销毁与重建,这里就涉及到数据保存的问题。虽然Activity可以通过onSaveInstanceState()机制保存与恢复数据,但是onSaveInstanceState()方法只能存储少量的数据进行恢原创 2021-08-20 19:37:50 · 22926 阅读 · 1 评论 -
Android Kotlin Exception处理
Kotlin 的异常和 Java 的一样, try…catch…finally代码块处理异常,唯一一点不同是:Kotlin 的异常都是 Unchecked exceptions。checked exceptions 是必须在方法上定义并且处理的异常,比如 Java 的 IoException。@Throws(IOException::class)fun createDirectory(file: File) { if (file.exists()) throw IOExcept原创 2021-07-05 11:05:07 · 1949 阅读 · 0 评论 -
Android Coroutines Channels
channels 可以干啥channels用于协程间的通信, 允许我们在不同的协程间传递数据(a stream of values).数据模型生产者-消费者模式发送数据到channel的协程被称为producer, 从channel接受数据的协程被称为consumer.当需要的时候, 多个协程可以向同一个channel发送数据, 一个channel的数据也可以被多个协程接收.当多个协程从同一个channel接收数据的时候, 每个元素仅被其中一个consumer消费一次. 处理元素会自动将其从ch原创 2021-06-08 13:32:51 · 619 阅读 · 3 评论 -
Kotlin实战指南二十:flow
flow 是啥按顺序发出值并正常完成或异常完成的冷流异步数据流flow咋用? flow { emit(1) //发射数字 1 emit(2) //发射数字 2 }.collect { //接收结果 Log.d("flow-", "value $it") }如果你这样写就会报错意思是:collect 方法是 suspend 修饰的挂起函数,只能在协程里,原创 2021-05-28 18:19:45 · 2624 阅读 · 0 评论 -
Kotlin实战指南十九:use 函数魔法
转载请标明出处:http://blog.youkuaiyun.com/zhaoyanjun6/article/details/117365712本文出自【赵彦军的博客】文章目录往期精彩文章use函数往期精彩文章Kotlin实战指南十七:JvmField、JvmStatic使用Kotlin实战指南十六:Synchronized、VolatileKotlin实战指南十五:协程泄漏本文章转载于:Kotlin use函数的魔法use函数实现了Closeable接口的对象可调用use函数use函数会自动.原创 2021-05-28 16:48:18 · 3089 阅读 · 0 评论 -
Kotlin实战指南十八:open、internal 关键字使用
文章目录open关键字internal关键字open关键字在java中允许创建任意的子类并重写方法任意的方法,除非显示的使用了final关键字进行标注。而在kotlin的世界里面则不是这样,在 kotlin 中它所有的类默认都是final的,那么就意味着不能被继承,而且在类中所有的方法也是默认是final 的,那么就是 kotlin 的方法默认也不能被重写。那么想在 kotlin 中继承父类应该怎么做呢?为类增加open,class就可以被继承了open class Person{原创 2021-05-28 16:12:24 · 4496 阅读 · 0 评论 -
Kotlin实战指南十七:JvmField、JvmStatic使用
@JvmFieldJvmField 是针对kotlin 字段来说的,有两重意思:消除了变量的getter与setter方法把变量用 public 暴露出来class Util { val age = 1}转换成 java 类public final class Util { private final int age = 1; public final int getAge() { return this.age; }}可以看到,a1 是私有原创 2021-05-11 20:57:17 · 4747 阅读 · 0 评论 -
Kotlin实战指南十六:Synchronized、Volatile
文章目录如何创建线程如何创建线程在Kotlin 中,我们仍然可以使用 java 的语法创建一个线程Thread(Runnable { }).start() //或者使用 Lambda 表达式Thread {}.start() 事实上,kotlin 为我们提供了一个简单写法:Kotlin中可以使用thread()方法创建新的线程,指定的语句块将在新线程中运行。语法简单,十分易用。fun main() { thread { Log.d("ya原创 2021-04-29 14:29:13 · 20107 阅读 · 0 评论 -
Kotlin实战指南十五:协程泄漏
coroutines 引用GlobalScopeMainScopelifecycleScopelifecycleScope 是 KTX 下面的扩展包,Android 帮我们提供了一个扩展引用使用注意: 不需要我们手动 , 系统已经帮我们做好了是ViewModel的KTX扩展库,可以让我们在ViewModel中方便的使用Coroutine。如果想要在 ViewModel 中使用作用域,我们需要添加依稀:使用:lifecycleScope 原理个人微信号:zhaoyanjun125 ,原创 2020-05-28 21:22:28 · 3313 阅读 · 2 评论 -
Kotlin实战指南十四:协程启动模式
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/95626034本文出自【赵彦军的博客】文章目录协程启动DEFAULTLAZYATOMICUNDISPATCHED附录参考资料协程启动说了这么多线程,原因嘛,毕竟大家对它是最熟悉的。协程的 API 设计其实也与之一脉相承,我们来看一段最简单的启动协程的方式:Globa...原创 2019-07-15 20:12:32 · 1842 阅读 · 0 评论 -
Kotlin实战指南十三:协程
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/95626034本文出自【赵彦军的博客】文章目录前言-协程介绍主流语言对协程的支持Android 项目引用创建一个协程前言-协程介绍协程又称微线程,从名字可以看出,协程的粒度比线程更小,并且是用户管理和控制的,多个协程可以运行在一个线程上面。那么协程出现的背景又是什么呢...原创 2019-07-12 16:44:24 · 3824 阅读 · 1 评论 -
Kotlin实战指南十二:data class
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/94649274本文出自【赵彦军的博客】文章目录前言正文toString()copy()前言在 kotlin 中我们定义一个模型类,比如 User 类 ,如下class User (var id:Int,var name:String)如果我们要打印输出 User...原创 2019-07-04 20:32:52 · 28598 阅读 · 1 评论 -
Kotlin实战指南十一:扩展函数
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/94640013本文出自【赵彦军的博客】高阶函数filterfilterNot例子1:操作List例子2:操作Map更多操作 filterKeys、filterValuestake、takeLastsortedBy 排序map 数据结构变化filter过滤list,符合...原创 2019-07-04 18:17:40 · 1201 阅读 · 0 评论 -
Kotlin实战指南十:let、apply、with、run
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details//94402604本文出自【赵彦军的博客】高阶函数let示例1:基础用法示例2:返回值letlet可以配合可空性 “?”来使用,如果data=null 则不执行let内部代码,如果有返回值则直接返回null在let中,用it表示引用对象,并可调用其方法,it不可省略。...原创 2019-07-01 18:34:39 · 6817 阅读 · 0 评论 -
Kotlin实战指南九:延迟初始化
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/93764289本文出自【赵彦军的博客】高阶函数lateinit 延迟初始化lazy 延迟初始化Koltin中属性在声明的同时也要求要被初始化,否则会报错。例如以下代码:private var name0: String //报错private var name1: ...原创 2019-06-26 18:55:04 · 2887 阅读 · 0 评论 -
Kotlin实战指南八:高阶函数
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87969098本文出自【赵彦军的博客】高阶函数filterfilterNot例子1:操作List例子2:操作Map更多操作take、takeLastfilter过滤list,符合过滤条件的就是过滤结果var list = mutableListOf(1, 2, 3,...原创 2019-03-31 23:25:25 · 1155 阅读 · 2 评论 -
Kotlin实战指南七:单例模式
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87877529本文出自【赵彦军的博客】单例模式单例模式单例模式在 Java 中单例模式有很多种写法,比如懒汉模式,恶汉模式。但是在 Kotlin 种的单例模式就简单很多,用 object 修饰的类就是单例。object User { var name: St...原创 2019-02-26 18:43:45 · 1150 阅读 · 0 评论 -
Kotlin实战指南六:可空类型、非可空类型
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87877529本文出自【赵彦军的博客】可空类型、非可空类型变量可空类型方法可空处理变量可空类型对于变量来说,我们是可以对其再次赋值的,在赋值的时候,这个值是有可能是空类型,也可能是非空类型。如果是空类型,就有可能在后续的操作的过程中,出现类似 java 的空指针异常,...原创 2019-02-22 14:45:28 · 1663 阅读 · 0 评论 -
Kotlin实战指南五:继承、接口
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87874895本文出自【赵彦军的博客】继承、接口继承子类有主构造函数子类没有主构造函数子类重写父类的方法属性重写接口实现接口接口中的属性接口继承解决覆盖冲突继承在 Kotlin 中所有类都有一个共同的超类 Any,这对于没有超类型声明的类是默认超类:class Ex...原创 2019-02-22 14:06:32 · 922 阅读 · 0 评论 -
Kotlin实战指南四:区间
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87866868本文出自【赵彦军的博客】Kotlin初体验四:区间区间实用函数区间区间表达式由具有操作符形式 … 的 rangeTo 函数辅以 in 和 !in 形成。 区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:i...原创 2019-02-21 19:50:05 · 787 阅读 · 0 评论 -
Kotlin实战指南三:流程控制
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87855797本文出自【赵彦军的博客】Kotlin初体验三:流程控制if 表达式1、普通用法2、作为表达式,可以直接赋值给变量,其值为为true的分支的值3、分支的内容除了是简单的结果,也可以是代码块。值为true的分支的最后一行为结果if 表达式1、普通用法var...原创 2019-02-21 10:29:32 · 644 阅读 · 0 评论 -
Kotlin实战指南二:变量、常量、静态常量
转载请标明出处:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/87811333本文出自【赵彦军的博客】Kotlin初体验二:变量、常量、静态常量变量常量静态常量变量Java中的变量public class App { private String name; //定义一个变量 }Kotlin中的变量,用 var...原创 2019-02-20 18:52:20 · 6313 阅读 · 2 评论 -
Kotlin实战指南一:集合
Kotlin初体验一:集合集合一、listOf()函数二、mutableListOf()函数三、arrayListOf()函数四、listOfNotNull()函数五、binarySearch()函数集合List是有顺序的数据结构,在Kotlin中提供了类似数组的访问方式:创建集合//创建一个空的list集合,相当于 new ArrayList()var list = mutableLi...原创 2019-02-20 14:13:07 · 1170 阅读 · 0 评论