
Kotlin
文章平均质量分 75
闲暇部落
OpenGL、音视频、Linux、Android、Studio、Kotlin,Java,Git,Unity,面试
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Kotlin协程详解——withContext函数
虽然能够提供线程的切换,但这只是单方向的,因为它没有提供线程的恢复。试想一下,我们有个网络请求,我们通过将线程切换到,当拿到请求成功的数据之后,所在的线程还是IO线程,这样并不能有利于我们UI操作。所以为了解决这个问题kotlin提供了,它不仅能够接受来帮助我们切换线程,同时在执行完毕之后还会帮助我们将之前切换掉的线程进恢复,保证协程运行的连贯性。这也是为什么官方推荐使用进行协程线程的切换的原因。原创 2025-02-12 17:18:33 · 362 阅读 · 0 评论 -
kotlin中expect和actual关键字修饰的函数作用
在 Kotlin 多平台编程中,expect和actual关键字用于定义跨平台的抽象和具体实现。这种机制允许开发者声明一个平台无关的接口或函数签名(使用expect),然后在每个目标平台上提供具体的实现(使用actualexpect。原创 2025-02-12 15:52:17 · 568 阅读 · 0 评论 -
Kotlin协程详解——拦截器ContinuationInterceptor
来创建一个协程(内部具体如何创建的这篇文章先不说,后续文章会单独分析),然后再调用了。既然已经明白了它的拦截方式,我们自己来手动写一个拦截器来验证一下。整体再来看这个例子,它是不是像一个简易版的协程的线程切换呢。所以发生这种情况也就不奇怪了,这是我们拦截的效果。理解是正确的,它可以在协程启动的时候进行拦截操作。结束之后,它内部还会进行一次线程恢复,将自身所处的。类型的实例,才将它加入到拼接链的尾部,对应的就是。因为我们使用的是默认参数,所以这里对应的就是。另外还有一点,如果细心的老铁就会发现,原创 2025-02-12 15:45:57 · 680 阅读 · 0 评论 -
Kotlin协程详解——Job
基本上每启动一个协程就会产生对应的Job,例如返回的就是一个Job,它可以用来管理协程,一个Job中可以关联多个子Job,同时它也提供了通过外部传入parent的实现这个很好理解,当传入parent时,此时的Job将会作为parent的子Job。原创 2025-02-11 16:28:38 · 652 阅读 · 0 评论 -
Kotlin协程详解——协程作用域CoroutineScope
一、一、原创 2025-02-11 16:16:56 · 854 阅读 · 0 评论 -
Kotlin协程详解——组合挂起函数
假设我们在不同的地方定义了两个进行某种调用远程服务或者进行计算的挂起函数。我们只如果需要按 顺序 调用它们,我们接下来会做什么——首先调用 doSomethingUsefulOne 接下来调用 doSomethingUsefulTwo ,并且计算它们结果的和吗?实际上,如果我们要根据第一个函数的结果来决定是否我们需要调用第二个函数或者决定如何调用它时,我们就会这样做。我们使用普通的顺序来进行调用,因为这些代码是运行在协程中的,只要像常规的代码一样顺序 都是默认的。原创 2025-02-10 19:50:41 · 278 阅读 · 0 评论 -
Kotlin协程详解——协程上下文
协程的上下文,它包含用户定义的一些数据集合,这些数据与协程密切相关。它类似于map集合,可以通过key来获取不同类型的数据。同时的灵活性很强,如果其需要改变只需使用当前的来创建一个新的即可。在协程启动部分提到,启动协程需要三个部分,其中一个部分就是上下文,其接口类型是CoroutineContext,通常所见的上下文类型是CombinedContext或者EmptyCoroutineContext,一个表示上下文组合,另一个表示空。原创 2025-02-10 19:49:47 · 1132 阅读 · 0 评论 -
Kotlin协程详解——挂起函数的应用和原理
定义:挂起函数是 Kotlin 协程中的一个特殊函数,使用suspend关键字进行标记。特性挂起函数可以在协程中暂停执行,直到某个异步操作完成后再恢复执行。挂起函数不会阻塞调用它的线程,而是让出线程去执行其他任务。挂起函数只能在协程或其他挂起函数中调用。原创 2025-02-08 17:43:44 · 1247 阅读 · 0 评论 -
Kotlin协程详解——调度器Dispatcher
Kotlin协程提供了多种内置的调度器,如Dispatchers.Default、Dispatchers.IO、Dispatchers.Main等,以及自定义调度器的创建方式,以适应不同的应用场景。通过合理使用调度器,可以显著提高应用的性能。Coroutine使用Dispatchers来负责调度协调程序执行的线程,这一点与RxJava的schedules有点类似,但不同的是Coroutine一定要执行在Dispatchers调度中,因为Dispatchers将负责resume被suspend的任务。原创 2025-02-08 11:13:28 · 334 阅读 · 0 评论 -
Kotlin协程详解——API函数介绍
Coroutine如何创建呢?有两种方式,分别为launch与asynclaunch: 开启一个新的Coroutine,但不返回结果async: 开启一个新的Coroutine,但返回结果还是上面的例子,如果我们需要执行fetch方法,可以使用launch创建一个Coroutine。原创 2025-02-08 11:12:12 · 161 阅读 · 0 评论 -
Kotlin协程详解——协程取消与超时
在一个长时间运行的应用程序中,你也许需要对你的后台协程进行细粒度的控制。 比如说,一个用户也许关闭了一个启动了协程的界面,那么现在协程的执行结果已经不再被需要了,这时,它应该是可以被取消的。 该 launch 函数返回了一个可以被用来取消运行中的协程的Job。在实践中绝大多数取消一个协程的理由是它有可能超时。 当你手动追踪一个相关 Job 的引用并启动了一个单独的协程在延迟后取消追踪,这里已经准备好使用 withTimeout 函数来做这件事原创 2025-02-07 16:54:04 · 1573 阅读 · 0 评论 -
Kotlin协程详解——runBlocking和coroutineScope的区别
runBlocking会阻塞当前线程,这意味着在当前线程执行runBlocking时,其他在该线程上等待的任务将被暂停执行,直到runBlocking内部的协程全部完成。coroutineScope则不会阻塞当前线程,而是挂起当前协程。挂起协程意味着当前协程的执行被暂停,但所在线程可以继续执行其他任务。当所有子协程执行完毕后,当前协程会恢复执行。原创 2025-02-06 17:46:32 · 598 阅读 · 0 评论 -
异步程序设计方式
几十年以来,作为开发人员,我们面临着需要解决的问题——如何防止我们的应用程序被阻塞。 当我们正在开发桌面应用,移动应用,甚至服务器端应用程序时,我们希望避免让用户等待或导致更糟糕的原因成为阻碍应用程序扩展的瓶颈。有很多途径来解决这种问题,包括:线程回调Future、 Promise 及其他反应式扩展协程原创 2025-02-05 18:58:28 · 793 阅读 · 0 评论 -
Kotlin协程详解——协程基础
你通常会看到 runBlocking 在应用程序的最顶层被这样使用,而在真正的代码中却很少见到它的身影,因为线程是宝贵的资源,阻塞它们是低效的,而且通常是不被期望的。协程遵循结构化并发的原则,这意味着新的协程只能在特定的 CoroutineScope 内启动,该作用域限定了协程的生命周期。这些情况导致的问题是代码间的嵌套层级太深,导致逻辑嵌套复杂,后续的维护成本也要提高,这不是我们所要看到的。协程可以被视为轻量级的线程,但它们之间存在一些重要的区别,这使得它们在实际使用中与线程有很大的不同。原创 2025-02-05 11:13:45 · 1323 阅读 · 0 评论 -
kotlin内联函数——runCatching
kotlin内联函数——runCatching原创 2025-01-24 07:09:37 · 956 阅读 · 0 评论 -
kotlin内联函数——takeIf和takeUnless
kotlin中内联函数takeIf和takeUnless原创 2025-01-23 12:59:31 · 750 阅读 · 0 评论 -
kotlin内联函数——let,run,apply,also,with的区别
kotlin中内联函数let,run,apply,also,with的区别原创 2025-01-23 11:09:44 · 1266 阅读 · 0 评论 -
Kotlin中is,!is,as和as?运算符的区别
Kotlin中is,!is,as和as?运算符的区别原创 2025-01-11 15:37:09 · 422 阅读 · 0 评论 -
Kotlin中的?.和!!主要区别
Kotlin中的?和!!主要区别在于它们对空指针的处理方式。?(安全调用操作符):当变量可能为null时,使用?可以安全地调用其方法或属性。如果变量为null,则不执行调用,直接返回null。= null.length) // 输出 null,因为 name 为 null这种方式不会抛出空指针异常,而是安全地处理null值。!!(非空断言操作符):当变量可能为null时,使用!!会强制执行调用,如果变量为null,则会抛出空指针异常。= null!原创 2024-11-22 21:31:16 · 1224 阅读 · 0 评论