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

kotlin协程的生命周期与jetpack组件绑定,第1张

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

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

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

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

1、 ViewModel ViewModelScope

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

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

2、Lifecycle LifecycleScope

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

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

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

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

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

4、LiveData 中使用协程

5、Room 对协程的支持

Room 从 v21 开始支持协程

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

本文章是建立在

利用 Kotlin 的特性,让 Intent 传递数据的方式更优雅

基础上进行调整的,你需要先了解此文章的相关内容再看本文

根据 利用 Kotlin 的特性,让 Intent 传递数据的方式更优雅

最后使用的结果就为

但此需要定义后每一个Activity对应都需要扩展一次参数,个人嫌太麻烦

便把Intent扩展放到底层BaseActivity中,但这样就变得麻烦,id扩展只能为String,但有可能为Int这样就没办法扩展,于是定义一个Any的委托

主要注意在 intentputExtra无法传入Any则在setValue中做了类型判断这里先做几个简单的类型,自己可根据情况扩展

定义好几个常用参数,这些扩展参数在自己项目中基本够用了,同时定义Any类型,这样也可以减少创建的大量的扩展变量

(定义的这些扩展变量其实也可以设置顶级作用域中,这样更方便取值,但不确定这种方式会不会有其他影响,并未设置,如果有清楚的小伙伴可以告诉我)

最后在使用时只要在不同activity中取值转换好对应传入值类型

kotlin出来很多年,并被google被赋予Android首选开发语言的地位,还是有必要研究一下的,基础语法不再复述了,只简单聊聊kotlin中的核心内容之一:协程 Coroutine。

相关概念和API可以直接进入[官网](>

以上就是关于kotlin协程的生命周期与jetpack组件绑定全部的内容,包括:kotlin协程的生命周期与jetpack组件绑定、使用kotlin扩展Intent传值、Kotlin Coroutine在 Android 中的使用和封装等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9421138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存