HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    kotlin协成(kotlin协程和线程的区别)

    发布时间:2023-04-13 16:54:16     稿源: 创意岭    阅读: 142        

    大家好!今天让创意岭的小编来大家介绍下关于kotlin协成的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    kotlin协成(kotlin协程和线程的区别)

    一、kotlin之协程(七),协程中relay、yield 区别

    kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?

    kotlin之协程(二),Kotlin协程是什么、挂起是什么、挂起的非阻塞式

    kotlin之协程(三),开始创建协程,launch,withContext

    kotlin之协程(四),协程的核心关键字suspend

    kotlin之协程(五),launch 函数以及协程的取消与超时

    kotlin之协程(六),协程中的 async和launch的区别以及runBlocking

    kotlin之协程(七),协程中relay、yield 区别

    relay 和 yield 方法是协程内部的操作,可以挂起协程,

    我们只要使用 kotlin 提供的协程上下文类型,线程池是有多个线程的,再次执行的机会很快就会有的。

    除了 main 类型,协程在挂起后都会封装成任务放到协程默认线程池的任务队列里去,有延迟时间的在时间过后会放到队列里去,没有延迟时间的直接放到队列里去

    二、Kotlin-协程网络请求封装

    真正的数据请求放在Repository(官方的方案还会有一层)

    BaseResult可能是失败,也可能是成功,所以要对这两种情况做区分。这里转换规则是把BaseResult<T> 转换成ApiResult,ApiResult是密封类,只有两个子类一个是Success,一个是Error。

    比如出现链接超时等非接口问题,kotlin中需要用异常捕获来处理。

    可以将接口返回的data数据重新组装成想要的类,比如data+请求的参数。

    viewmodel 调用

    checkResult 主要对封装的数据判断,并通知UI更新。

    三、Android Kotlin Coroutine(3):Job概述

    在 Kotlin 中启动一个协程主要有 2 种方式:

    一种是通过 launch 启动,一种是通过 async 启动,前者会返回一个 Job 类型的对象,后者会返回一个 Deferred 类型的对象。

    Job 顾名思义就是“工作”的意思,每个协程可以想象成是一个工作任务,启动一个协程就是启动一个工作任务,来看看 Job 接口的主要定义:

    从前面 Job 的接口定义中可以看到,它与线程 Thread 真的很相似,同样都有好几种不同的运行状态,下面通过几个简单的例子直观的感受一下:

    执行结果为:

    懒加载模式,协程还没启动,所以 isActive = false

    执行结果为:

    协程正常启动,所以isActive = true

    执行结果为:

    协程还没执行完毕,就被取消运行,所以 isCancelled = true

    执行结果为:

    协程已经执行完毕了,其 isCompleted 肯定为 true 了,再去调用 cancel() 方法,就没有任何影响了,所以 isCancelled = false。一件已经完成的任务,你再去取消它,是没有任何实际意义的了。

    执行结果为:

    协程还没有启动就取消,发现 isCompleted 与 isCancelled 都为 true,与前面几种情况对比一下,才能真正理解这几种状态的变化。

    执行结果为:

    协程非正常结束运行,相当于系统把它取消掉了,所以其 isCancelled 也为 true 。

    在源码里可以看到以下状态图:

    首先它也是一个 Job,所以它拥有 Job 的一切特性。其次,它能返回一个结果值,这点与 Java 里的 Future 类特别相似(如果你熟悉的话)。它比 Job 多了一个方法:

    调用该方法时,它会等待该 Job 执行完并返回一个结果值。这是一个 suspend 方法,只能在协程内部调用,它会暂停协程的执行(当然它并不会阻塞线程),当 Job 执行完返回结果后,它又会恢复协程的执行。

    一般在这种情况下,你可能会用到它:

    从 Job 的接口定义中可以看到,Job 是可以有很多子 Job 的,如果一个 Job 与其他 Job 没有任何关联,那么它的完成及取消就很简单,不会影响到其他 Job 的执行。如果是有父子关系的 Job,那么他们的完成及取消则是会有相互关联关系的。

    执行结果为:

    执行结果为:

    parentJob 被取消之后,childJob2 最后也被取消掉了。

    四、kotlin协程的生命周期与jetpack组件绑定

    安卓上, 协程可以帮忙解决两大问题:

    管理长时间运行的任务, 这些任务可能阻塞主线程, 导致 UI 卡顿.

    在主线程上安全地调用网络或磁盘操作.

    安卓上使用协程的最好方式是使用官方的架构组件, 它们提供了对协程的支持. 目前 ViewModel, Lifecycle, LiveData , Room 组件提供了对协程一等的支持.

    1、 ViewModel ViewModelScope

    对 ViewModel 的支持主要是在 ViewModel 上提供了一个称为 ViewModelScope 的 CoroutineScope , 所有在 ViewModelScope 上启动的协程, 当 ViewModelScope 销毁时自动取消. 这样可以有效防止忘记取消任务时导致的资源泄漏.

    其实 viewModelScope 的实现非常简单, 就是一个带有 Dispatchers.Main 的 SupervisorJob, 当 ViewModel.clear() 时, 在里面调用 Job.cancel() , 因为结构化并发的原因, 所有在 viewModelScope 范围内启动的协程, 都会级联取消.

    2、Lifecycle LifecycleScope

    每个具有生命周期的对象(Lifecycle)都有一个 LifecycleScope , 所有在它的范围内启动的协程, 当生命周期对象销毁时, 都会取消. 生命周期对象的 CoroutineScope 可以通过 lifecycle.coroutineScope 或者 lifecycleOwner.lifecycleScope 属性获取.

    3、挂起生命周期相关的协程

    在 Activity 或者 Fragment 中, 我们有时需要等到某个生命周期方法时, 或者至少在某个生命周期方法之后才执行某一任务, 如页面状态至少要 STARTED 才可以执行 FragmentTransaction , 对这种需求, 生命周期组件也提供了支持. Lifecycle 提供了 lifecycle.whenCreated, lifecycle.whenStarted, lifecycle.whenResumed 三个方法, 运行在这些方法内的协程, 如果页面的状态不是至少处于要求的最小状态, 协程将会挂起运行.

    如果协程通过上面的whenXXX方法启动后, 处于活动状态, 还没有结束, 这时页面销毁了, 则协程会自动取消, 并且会走到下面的 finally 块中, 所在 finally 中, 需要检查页面所处的状态, 再决定做什么动作.

    这里要注意: 如果页面 restart 重启了, 但协程并不会重启, 总之要确保信息是正确的.

    4、LiveData 中使用协程

    5、Room 对协程的支持

    Room 从 v2.1 开始支持协程

    JetPack知识点实战系列三:使用 Coroutines, Retrofit, Moshi实现网络数据请求

    以上就是关于kotlin协成相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    小红书kol怎么找产品(小红书怎么找客源)

    杭州百度公司KO优屏网络(杭州seo公司 优屏网络)

    微博kol联系传播易(微博的传播)

    为什么自己橱窗自己不能下单

    常州旅游景观设计施工公司(常州旅游景观设计施工公司排名)