![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
koltin与协程
文章平均质量分 71
koltin基础语法、协程入门、安卓kotlin项目框架等技术
Aruba233
人生就是不断的超越自我
而超越自我需要不断的坚持
展开
-
kotlin基础--变量常量、条件语句、函数
kotlin作为谷歌钦定的安卓开发官方语言,语法简洁,相比于Java,包含了现代语言高级特性。它也是一门跨平台语言,可以脱离虚拟机,直接编译成二进制可执行文件在各大平台运行本文基于有一定的Java基础一.变量常量1.声明变量var关键字 变量名:变量类型 = 初始值//var关键字 变量名:变量类型 = 初始值 var name: Int = 52.内置数据类型数...原创 2021-08-21 11:04:31 · 109 阅读 · 0 评论 -
kotlin基础--匿名函数、闭包
上篇介绍了kotlin的基本类型,变量定义、函数定义等,接下来来学习如何使用匿名函数、lambda、闭包,这将大大提高我们使用kotlin编写代码的效率,相对于Java繁琐的代码,你会爱上这种简洁一.匿名函数Java也有匿名函数,但是kotlin比Java简洁很多1.函数变量如果我们要在Java方法中传入一个回调函数,需要定义一个接口,并使用new关键字实例化匿名类实现该方法:publi...原创 2021-08-21 13:13:11 · 438 阅读 · 0 评论 -
kotlin基础--null安全、异常、先决条件
上次说到匿名函数、闭包,可以比对Java发现,使用kotlin真是太方便了。接下来来学习kotlin的null安全、异常、先决条件一 .null使用Java时,我们需要大量的判断一个变量是否为null,否则使用是会抛出NullPointer异常。而kotlin使用null给一个变量赋值时,在编译时,就会报错,来防止发生这种异常1.可空性kotlin中,除非另有规定,否则变量禁止为null...原创 2021-08-22 10:32:59 · 298 阅读 · 0 评论 -
kotlin基础--字符串操作、数字类型、标准库函数
上次我们学习了kotlin的null安全、异常、先决条件,接下来来看看kotlin的字符串操作、数字类型、标准库函数一、字符串操作1.字符串截取substring函数支持IntRange类型参数,使用until创建的范围遵循左闭右开const val title = "my day's study"fun main() { //'的索引 val endIndex = t...原创 2021-08-22 11:54:19 · 405 阅读 · 0 评论 -
kotlin基础--List、Set、Map
上次我们学习了kotlin的字符串操作、数字类型、标准库函数,接下来我们来学习集合,和其他变量类型一样,集合也分为可变和只读一、List1.List集合创建与元素获取调用listOf函数创建集合,我们可以通过和数组一样的方式: "变量[下标]" 来获取元素,或者使用get函数获取fun main() { //listOf创建List集合 var list = listOf(...原创 2021-08-23 09:24:30 · 378 阅读 · 0 评论 -
kotlin基础--类定义、初始化、继承
上次介绍了kotlin中的集合List、Set、Map的操作,接下来介绍kotlin中如何定义类、初始化、继承一、类的定义1.field对于每个属性,kotlin会自动生成一个的field:代表属性的值,一个getter方法,一个setter方法。我们操作属性时,实际调用的是get和set方法,因为kotlin变量的不可空性,对于非空变量,我们在赋值时,系统要对赋值的值进行是否为null判断...原创 2021-08-23 15:51:30 · 941 阅读 · 0 评论 -
kotlin基础--对象、接口、抽象类
上次介绍了kotlin的类定义与初始化,接下来学习对象、接口、抽象类一、对象1.object关键字object,类似Java中的静态三种使用方式:1.1 对象声明对应Java中的单例类,只会在内存中实例化一次object Const { init { println("init") } fun getConfig(): String { ...原创 2021-08-24 11:11:43 · 129 阅读 · 0 评论 -
kotlin--泛型
kotlin作为一种高级语言,也提供了泛型,它的泛型比Java更为灵活一、泛型类1.定义泛型类定义泛型类和Java差不多class Magic<T>(_item: T) { var subOject: T = _item}data class Boy(var name: String, var age: Int)data class Dog(var age: ...原创 2021-08-25 10:33:00 · 115 阅读 · 0 评论 -
kotlin--扩展
之间使用了kotlin的标准函数、匿名函数,觉得它十分灵活,简便。其实kotlin的标准函数就是用了扩展一、扩展函数1.定义扩展函数当我们需要对一个类新增一个方法时,在Java中需要写一个子类继承它,然后添加我们的新方法。在kotlin中,可以利用扩展增加类的功能,指定类名后就可以新增函数我们给所有类新增打印函数,给String新增加上!的方法://给所有类新增打印函数 :Any.函数...原创 2021-08-25 15:33:42 · 251 阅读 · 0 评论 -
kotlin--函数式编程
函数式编程范式主要依赖于高阶函数(以函数为参数或返回值)返回的数据,这些高阶函数专用于处理各种集合,可以联合使用多个同类函数构建链式操作以创建复杂的计算行为。kotlin支持多种编程范式,所以可以灵活运用面向对象编程和函数式编程来解决问题一、变换变换是函数式编程中的第一大类函数,变换函数会遍历集合内容,以一个值参传入的变换器函数,变换每个元素,返回包含已修改元素的集合给链上的其他函数1.ma...原创 2021-08-26 11:25:19 · 234 阅读 · 0 评论 -
kotlin--与Java互操作
对于以前的Java老项目,想要使用kotlin,全部转换带来的成本代价太大了,而官方也提供了慢慢过渡到kotlin的方法,使得Java和kotlin可以互通一、互操作性和可空性1.Java中所有的对象都可能为空操作Java对象时,我们有必要加上判空符Java:public class MyClass { public String value; public S...原创 2021-08-26 14:18:13 · 234 阅读 · 0 评论 -
kotlin--协程入门
协程到目前为止没有一个具体的定义,但很多语言都有协程,但每个语言又有所不同,官方说协程基于线程,是轻量级的线程。在我看来,协程是一种趋势,它让我们从繁琐的多线程中释放出来,提高我们的编写代码的效率。为什么说这是一种趋势,就像我们之前学习的函数式编程,从最开始的面向方法编程,到面向对象编程,再到函数式编程,程序员们经历了造轮子,用轮子,再最后到的“指挥”。我把函数式编程理解为面向管理编程,因为我从...原创 2021-08-28 12:07:42 · 233 阅读 · 0 评论 -
kotlin--协程的启动和取消
一、协程的启动1.launch与async构建器都用来启动新协程launch:我们之前已经使用过了GlobalScope的launch来启动协程,它返回一个Jobasync:返回一个Deferred,它也是一个Job,但是可以使用await函数获得运行的结果除了之前结构化并发中介绍的几种指定CoroutineScope的API外,我们还可以使用runBlocking函数来指定Corouti...原创 2021-08-30 14:28:26 · 815 阅读 · 0 评论 -
kotlin--协程上下文、异常处理
从前面我们可以大致了解了协程的玩法,如果一个协程中使用子协程,那么该协程会等待子协程执行结束后才真正退出,而达到这种效果的原因就是协程上下文,上下文贯穿了协程的生命周期,这套思想和我们app的上下文很像在开始真正了解协程上下文之前,我们先来看看下面的例子下面的图代表了一个协程a的生命,就像一条从上至下的直线,它的生命只有100ms当我们在a协程延迟函数100ms之前开启一个子协程b...原创 2021-09-01 22:06:45 · 636 阅读 · 0 评论 -
kotlin--Flow的运用
Flow是kotlin提供的一个工具,使用协程封装成生产者-消费者模式,上流来负责生产,下流来接收消耗。一、Flow的使用1.Flow的创建1.可以使用flow构建函数构建一个Flow类型返回值的函数2.flow{}构建体中可以调用挂起函数,即上流3.上流使用emit函数发射值4.下流使用collect函数收集值//上流函数fun simpleFlow() = flow ...原创 2021-09-03 14:17:08 · 1950 阅读 · 0 评论 -
kotlin--Channel、多路复用、并发安全
一、ChannelChannel相较于Flow,Flow是冷流,本质上可以说是一个单线程操作,只有开始收集时,上流代码才会启动,而Channel是一个并发安全的队列,可以用来连接不同的协程,实现不同协程之间的通信1.Channel的使用创建一个Channel对象,在不同协程中调用其send和receive函数fun `test channel`() = runBlocking {...原创 2021-09-06 11:24:11 · 504 阅读 · 0 评论 -
kotlin--Flow文件下载
学习了kotlin后,我们将它运用到实际开发中,结合Flow实现文件下载最终效果:项目使用了Navigation框架:Activity+Fragment的方式导入依赖:implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' implementation 'androidx.navigation:...原创 2021-09-19 15:34:06 · 532 阅读 · 0 评论 -
kotlin--Flow结合Room运用
kotlin结合Room在实际项目中的运用架构还是MVVM,DataBinding+ViewModel+LiveData的组合效果:1.首先添加Room依赖添加kapt插件:plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt'}def room_vers...原创 2021-09-20 21:05:51 · 623 阅读 · 0 评论 -
kotlin--Flow结合retrofit运用
kotlin集成retrofit获取网络数据,将数据通过Flow发射效果:1.定义实体类和网络相关实体类:package com.aruba.flowapplyapplication.modeldata class Article(val id: Int, val text: String)Api:package com.aruba.flowapplyapplicatio...原创 2021-09-21 13:06:22 · 954 阅读 · 0 评论 -
kotlin--StateFlow运用
StateFlow当值发生变化,就会将值发送出去,下流就可以接收到新值。在某些场景下,StateFlow比LiveData更适用效果:1.定义ViewModelStateFlow需要初始值package com.aruba.flowapplyapplication.viewmodelimport android.view.Viewimport androidx.lifecy...原创 2021-09-21 14:53:51 · 942 阅读 · 0 评论 -
kotlin--SharedFlow运用
Flow为上流发射,下流接收,是一对一的,而SharedFlow可以一对多,发射一次,多端接收效果:1.定义一个类,来对MutableSharedFlow对象作操作package com.aruba.flowapplyapplication.commonimport kotlinx.coroutines.flow.MutableSharedFlow/** * Create...原创 2021-09-22 09:55:59 · 773 阅读 · 0 评论 -
kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构实战
前面我们使用Java来运用JetPack中的一系列组件,又使用kotlin运用这些组件实现了一系列功能:kotlin--Flow文件下载kotlin--Flow结合Room运用kotlin--Flow结合retrofit运用kotlin--StateFlow运用kotlin--SharedFlow运用接着,Jetpack的Paging3中,我们使用的语言是kotlin,相信通过这些...原创 2021-09-25 21:06:13 · 1689 阅读 · 0 评论