Kotlin协程学习笔记

一、Kotlin协程简介

协程基于线程,是轻量级线程。在Android中,协程主要用于解决两个问题:

  • 处理耗时任务,这种任务常常会阻塞主线程。
  • 保证主线程安全,即确保安全地从主线程调用任何的suspend函数。

协程让异步逻辑同步化,可以杜绝回调地狱。协程最核心的点就是,函数或者一段程序能够被挂起,稍后再在挂起的位置恢复。
常规的函数操作包括:invoke(call)和return,协程新增了suspend和resume。

  • suspend:挂起或暂停,用于暂停执行当前的协程,并保存所有的局部变量。
  • resume:用于让已经暂停的协程从其暂停处继续执行。

挂起函数

使用suspend关键字修饰的函数叫做挂起函数。
挂起函数只能在协程体内或其它挂起函数内调用。

为什么Kotlin语法要求挂起函数一定要运行在协程体内或者其他挂起函数中呢?
答案就是,任何一个协程体或者挂起函数中都有一个隐含的Continuation实例,编译器能够对这个实例进行正确传递,并将这个细节隐藏在协程的背后,让我们的异步代码看起来像同步代码一样。协程,就是一个支持挂起和恢复的程序,而Kotlin协程是基于Continuation来实现挂起和恢复的。

调度器
所有的协程必须在调度器中运行,即使它们在主线程中运行也是如此。
在这里插入图片描述

  • Dispatchers.Main:Android上的主线程,用来处理UI交互和一些轻量级的任务:调用suspend函数,调用UI函数,更新LiveData。
  • Dispatchers.IO:非主线程,专为磁盘和网络IO进行了优化:数据库、文件读写、网络处理。
  • Dispatchers.Default:非主线程,专为CPU密集型任务进行了优化:数组排序、JSON数据解析、处理差异判断。

可以使用withContext切换调度器

suspend fun withContextFun(){
   
    Executors.newSingleThreadExecutor()
        .asCoroutineDispatcher()
        .use {
    dispatcher 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JPC客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值