首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Bennyhuo

    简单对比下 Moshi 和 Kotlinx.serialization

    上一篇我们对比介绍了 Gson 和 Kotlinx.serialization,很多小伙伴在后台留言说,moshi 呢? Moshi 怎么解决 Kotlin 数据类的问题? 我们上一篇文章提到 Gson 不认识 Kotlin,所以对 Kotlin 的数据类几乎没有支持,这包括构造器的默认值、初始化逻辑的调用等等,而 Moshi 则类似于 Kotlinx.serialization

    3.4K10发布于 2020-02-20
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】协程并发安全问题 ( 使用 Atomic 并发安全类型 | 使用 Channel 通道 | 使用 Mutext 轻量级锁 | 使用 Semaphore 轻量级信号量 )

    import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit class MainActivity

    98020编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )

    import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.async import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking

    1.2K10编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

    import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.runBlocking import java.io.IOException

    3K20编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】Flow 异步流 ⑧ ( 背压概念 | 使用缓冲处理背压问题 | 使用 flowOn 处理背压问题 | 从提高收集元素效率方向解决背压问题 )

    import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.delay import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.collect import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking

    1.1K21编辑于 2023-03-30
  • 来自专栏一个会写诗的程序员的博客

    Kotlin 并发编程之"协程"

    This is a guide on core features of kotlinx.coroutines with a series of examples, divided up into different 想要使用 Kotlin 协程,需要单独添加依赖: compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version : '1.2.2' 先用一个官方的demo,直观认识一下协程: import kotlinx.coroutines.* fun main() { GlobalScope.launch { // 我们再写一个稍微丰富一点的例子: package com.kotlin.notes.coroutine import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.lang.Thread.sleep

    1K20发布于 2019-07-14
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )

    import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeout class MainActivity : AppCompatActivity at kotlinx.coroutines.EventLoopImplBase$DelayedRunnableTask.run(EventLoop.common.kt:507) at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277) at kotlinx.coroutines.DefaultExecutor.run(DefaultExecutor.kt:69) at java.lang.Thread.run import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeoutOrNull class MainActivity

    1.8K10编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】在 Android Studio 的 Terminal 终端执行 gradlew 报错 ( 无法将“gradlew”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称 )

    :kotlinx-coroutines-android:1.6.1 | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core :1.6.1 | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1 | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (c) | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (c) | | | | | \---

    6.7K10编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】Flow 异步流 ③ ( 冷流 | 流被收集时运行 | 流的连续性 )

    kim.hsl.coroutine import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.flow.AbstractFlow import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity() { override fun onCreate

    80820编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】协程取消 ① ( 协程作用域取消 | 协程作用域子协程取消 | 通过抛出异常取消协程 | Job#cancel 函数 | 自定义异常取消协程 )

    : 子协程 的取消 不会影响 同一层级的 兄弟协程的执行 ; 通过抛出异常取消协程 : 协程取消通常会通过 抛出 CancellationException 异常 实现 ; 挂起函数取消 : 定义在 kotlinx.coroutines :497) 17:20:56.632 W at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt: W at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:61) 17:20:56.633 W at kotlinx.coroutines.BuildersKt.runBlocking (Unknown Source:1) 17:20:56.633 W at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default (Builders.kt:40) 17:20:56.633 W at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source

    1.6K20编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】Flow 流收尾工作 ( finally 代码块收尾 | onCompletion 代码块收尾 | onCompletion 中获取异常信息 | catch 代码块中捕获异常 )

    import kotlinx.coroutines.flow.collect import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.runBlocking import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.runBlocking :277) at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:87) at kotlinx.coroutines.BuildersKt import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.onCompletion

    1.4K20编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

    import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { val TAG = "MainActivity (DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch class MainActivity : AppCompatActivity (DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely

    2.2K10编辑于 2023-03-30
  • 来自专栏小陈飞砖

    The binary version of its metadata is 1.6.0, expected version is 1.4.2.

    configurations.all { resolutionStrategy { force 'org.jetbrains.kotlinx:kotlinx-coroutines-core :1.4.2' } } } async后发现依赖中只有一个了: 还是报错,这时候会不会觉得这个 force也不行,稍等,查看下,发现 接着把kotlinx-coroutines-android configurations.all { resolutionStrategy { force 'org.jetbrains.kotlinx:kotlinx-coroutines-core :1.4.2', "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2" } } } 再查看依赖: 这样变编译通过了

    2.4K50编辑于 2022-07-30
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】Android Studio 编译报错 ( Module was compiled with an incompatible version of Kotlin. The binary )

    :kotlinx-coroutines-android:1.6.1 | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core :1.6.1 | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (c) | | | | | \--- :kotlinx-coroutines-android:1.6.1 | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (c) | | | | | \---

    11.1K41编辑于 2023-03-30
  • 来自专栏android技术

    kotlin--Flow结合retrofit运用

    com.aruba.flowapplyapplication.model.Article import com.aruba.flowapplyapplication.net.RetrofitClient import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.launch /** * Created by aruba on 2021 com.aruba.flowapplyapplication.databinding.FragmentArticleBinding import com.aruba.flowapplyapplication.viewmodel.ArticleViewModel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class ArticleFragment : Fragment() { private val articleViewModel

    2.3K10编辑于 2021-12-06
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】Android Studio 编译报错 ( kotlin library {0} was compiled with a newer kotlin compiler and not b )

    :kotlinx-coroutines-android:1.6.1 | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core :1.6.1 | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1 | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1 | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1 (c) | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1 (c) | | | | | \---

    2.6K20编辑于 2023-03-30
  • 来自专栏android技术

    kotlin--协程的启动和取消

    (ResumeMode.kt:67) at kotlinx.coroutines.DispatchedKt.resume(Dispatched.kt:309) at kotlinx.coroutines.DispatchedKt.dispatch :332) at kotlinx.coroutines.EventLoopImplBase$DelayedResumeTask.run(EventLoop.kt:298) at kotlinx.coroutines.EventLoopImplBase.processNextEvent (EventLoop.kt:116) at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:80) at kotlinx.coroutines.BuildersKt ) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:36) at kotlinx.coroutines.BuildersKt.runBlocking :128) at kotlinx.coroutines.TimeoutCoroutine.run(Timeout.kt:94) at kotlinx.coroutines.EventLoopImplBase

    1.3K30编辑于 2021-12-06
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin 协程】Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )

    import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity() { override fun onCreate import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity() { override fun onCreate import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.launch

    1.5K10编辑于 2023-03-30
  • 来自专栏用户9101034的专栏

    Kotlin语言基础入门到熟悉:Kotlin协程基础

    import kotlinx.coroutines.\* fun main() { GlobalScope.launch { // 在后台启动一个新的协程并继续 delay(200) import kotlinx.coroutines.\* fun main() = runBlocking { delay(100) // 在这里可以用delay了 GlobalScope.launch import kotlinx.coroutines.\* fun main() = runBlocking { // this: CoroutineScope launch { delay import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking 再举一个例子 import kotlinx.coroutines.\* fun main() = runBlocking { GlobalScope.launch { for (i in

    95700编辑于 2022-02-22
  • 来自专栏android技术

    kotlin--Flow文件下载

    androidx.legacy:legacy-support-v4:1.0.0' //依赖协程核心库 ,提供Android UI调度器 implementation "org.jetbrains.kotlinx :kotlinx-coroutines-core:1.5.1" //依赖当前平台所对应的平台库 (必须) implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android import kotlinx.coroutines.flow.flow import okhttp3.OkHttpClient import okhttp3.Request import java.io.File import com.dongnaoedu.flowpractice.utils.copyTo import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch

    1K10编辑于 2021-12-06
领券