kotlin第三部分复习纪要

文章介绍了Kotlin中的协程概念,如轻量级线程和协程的四种调度器(Default,Unconfined,IO,Main),以及协程的四种启动模式。还探讨了协程上下文的关键组件,如Job和CoroutineExceptionHandler。此外,文章提到了协程与Flow的结合使用,Flow作为一个冷流,在collect时才执行上游代码,并通过示例展示了Flow的创建和数据收集过程。
摘要由CSDN通过智能技术生成

协程解析:

  • 轻量级线程。在一个线程中可以启动多个协程。
  • 在协程中使用同步方式写出异步代码(协程挂起时不会阻塞线程)。
GlobalScope.launch(Dispatchers.Main) {//开始协程:主线程
   val result = userApi.getUserSuspend("suming")//网络请求(IO 线程)
   tv_name.text = result?.name //更新 UI(主线程)
}

协程关于线程切换的四种调度器:

  • Dispatchers.Default:默认调度器。它使用JVM的共享线程池,该调度器的最大并发度是CPU的核心数,默认为2。
  • Dispatchers.Unconfined:非受限调度器。该调度器不会限制代码在指定的线程上执行。即挂起函数后面的代码不会主动恢复到挂起之前的线程去执行,而是在执行挂起函数的线程上执行。
  • Dispatchers.IO:IO调度器。它将阻塞的IO任务分流到一个共享的线程池中。该调度器和Dispatchers.Default共享线程。
  • Dispatchers.Main:主线程调度器。一般用于操作与更新UI。
    (Dispatchers.Default调度器和Dispatchers.IO 调度器分配的线程为守护线程。)

协程共有以下四种启动模式:

  • CoroutineStart.DEFAULT:立即执行协程,可以随时取消。
  • CoroutineStart.LAZY:创建一个协程,但不执行,在用户需要时手动触发执行。
  • CoroutineStart.ATOMIC:立即执行协程,但在协程执行前无法取消。目前处于试验阶段。
  • CoroutineStart.UNDISPATCHED:立即在当前线程执行协程,直到遇到第一个挂起。目前处于试验阶段。

还有一个问题就是关于协程的上下文,它们均继承自CoroutineContext::

  • Job:协程的句柄,对协程的控制和管理生命周期。
  • CoroutineName:协程的名称,可用于调试。
  • CoroutineDispatcher:调度器,确定协程在指定的线程来执行。
  • CoroutineExceptionHandler:协程异常处理器,处理未捕获的异常。

经常和协程搭配使用的还有一个kotlin操作符flow,记一下其使用方式:
(1)flow{ … }内部可以调用suspend 函数;
(2)使用 emit() 方法来发射数据;
(3)使用 collect() 方法来收集结果。

例如:上流
fun simpleFlow() = flow {
    for (i in 1..3) {
        delay(100)
        emit(i)
    }
}
 
fun main() {
    runBlocking {
        //下流处理数据
        simpleFlow().collect { value ->
            println(value)
        }
 
        println("finished")
    }
}

结果:
1
2
3
finished

2、Flow是冷流,所以collect是挂起函数,不是子协程,并且只有执行collect函数时,上流的代码才会被执行,所以在一个协程中多次调用collect,它们会按顺序执行。

fun simpleFlow() = flow {
    for (i in 1..3) {
        delay(100)
        emit(i)
    }
}
 
fun main() {
    runBlocking {
        simpleFlow().collect { value ->
            println(value)
        }
 
        println("collect1 finished")
 
        simpleFlow().collect { value ->
            println(value)
        }
 
        println("collect2 finished")
    }
}

结果:
1
2
3
collect1 finished
1
2
3
collect2 finished
创建一个简单地flow
flow {
    (5 .. 10).forEach {
              emit(it)
         }
}.collect{
   println(it)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Kotlin 编写第三方安卓开发客服功能,您可以按照以下步骤进行: 1. 集成第三方 SDK:您可以选择一个第三方客服 SDK,将其添加到您的项目中。例如,融云的 SDK 可以在 Gradle 中添加以下依赖: ```groovy implementation 'io.rong:imlib-kotlin:4.0.0' ``` 2. 初始化 SDK:在应用程序启动时,您应该初始化客服 SDK。例如,融云的 SDK 可以在 Application 类中初始化: ```kotlin class MyApplication : Application() { override fun onCreate() { super.onCreate() RongIM.init(this) } } ``` 3. 登录客服账号:客服 SDK 需要您提供客服账号信息。您可以在应用程序中提供一个登录界面,让用户输入客服账号和密码。例如,以下代码展示了如何使用融云 SDK 登录客服账号: ```kotlin RongIM.connect(token, object : RongIMClient.ConnectCallback() { override fun onSuccess(userId: String?) { // 登录成功 } override fun onError(errorCode: RongIMClient.ErrorCode?) { // 登录失败 } override fun onTokenIncorrect() { // token 失效 } }) ``` 4. 实现客服聊天界面:您可以使用 RecyclerView 和 Adapter 等组件来创建客服聊天界面。例如,以下代码展示了如何使用 RecyclerView 显示聊天消息: ```kotlin val adapter = ChatAdapter() recyclerView.adapter = adapter RongIMClient.setOnReceiveMessageListener { message, left -> if (left) { // 收到离线消息 } else { // 收到在线消息 adapter.addMessage(message) recyclerView.smoothScrollToPosition(adapter.itemCount - 1) } true } ``` 5. 发送消息:当用户在客服聊天界面中输入消息后,您需要使用客服 SDK 发送消息。例如,以下代码展示了如何使用融云 SDK 发送文本消息: ```kotlin val content = TextMessage.obtain(text) val message = Message.obtain(targetId, conversationType, content) RongIM.getInstance().sendMessage(message, null, null, object : RongIMClient.SendMessageCallback() { override fun onSuccess(message: Message?) { // 发送成功 } override fun onError(message: Message?, errorCode: RongIMClient.ErrorCode?) { // 发送失败 } }) ``` 以上是使用 Kotlin 编写第三方安卓开发客服功能的基本步骤。具体实现可能会有所差异,您需要根据您选择的客服 SDK 进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值