协程举例学习

在Android开发中,协程(Coroutines)是处理异步操作的一种强大工具。它们可以帮助你以一种更简洁、更易于维护的方式编写异步代码。从Android Kotlin 协程的稳定版本开始,你可以通过kotlinx.coroutines库来使用协程。下面是一些使用协程的基本示例。

  1. 添加依赖

首先,确保你的build.gradle文件中已经添加了kotlinx.coroutines的依赖:

dependencies {
implementation “org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0” // 使用最新版本
}
2. 示例一:使用launch和runBlocking

launch用于在后台启动一个协程,而runBlocking则用于在主线程中运行一个协程,它会阻塞当前线程直到协程执行完毕。

import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis

fun main() = runBlocking { // 这将阻塞当前线程直到内部协程执行完毕
val time = measureTimeMillis {
val job = launch { // launch一个新的协程并继续
delay(1000L) // 非阻塞的延迟调用,单位为毫秒
println(“World!”) // 在延迟后打印输出
}
println(“Hello,”) // 主协程继续执行,我们可以立即输出此行
job.join() // 等待直到子协程完成
}
println(“完成耗时:${time} ms”)
}
3. 示例二:使用async和await

async用于启动一个返回Deferred的协程,你可以使用await()来等待其结果。

import kotlinx.coroutines.*

fun main() = runBlocking {
val time = measureTimeMillis {
val one = async { doSomethingUsefulOne() }
val two = async { doSomethingUsefulTwo() }
println(“The answer is ${one.await() + two.await()}”)
}
println(“Completed within $time ms”)
}

suspend fun doSomethingUsefulOne(): Int {
delay(1000L) // 假装我们在这里做了一些有用的事情
return 13
}

suspend fun doSomethingUsefulTwo(): Int {
delay(1000L) // 假装我们在这里也做了一些有用的事情
return 29
}
4. 在Android中使用协程(例如在Activity或ViewModel中)

在Android的Activity或ViewModel中使用协程时,你应该使用GlobalScope.launch或者在ViewModel中使用viewModelScope.launch来避免内存泄漏。同时,你也可以使用结构化的并发,比如在CoroutineScope中启动协程。

import kotlinx.coroutines.*
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope

class MyViewModel : ViewModel() {
fun fetchData() {
viewModelScope.launch { // 使用viewModelScope来避免内存泄漏
val data = withContext(Dispatchers.IO) { // 在IO线程中执行耗时操作
// 执行网络请求或数据库查询等操作
fetchDataFromNetwork() // 假设这是一个异步操作并返回Deferred类型的结果
}
// 使用获取到的数据更新UI等操作应在主线程中执行,可以通过withContext切换回主线程:
withContext(Dispatchers.Main) {
// 更新UI等操作
}
}
}
}
5. 注意事项:内存泄漏和结构化并发

在Android中,使用协程时要注意避免内存泄漏。确保在Activity或Fragment销毁时取消所有未完成的协程。可以使用viewModelScope或者在自定义的CoroutineScope中管理协程的生命周期。例如,在Activity或Fragment的onDestroy()方法中取消所有未完成的协程。对于ViewModel,使用viewModelScope自动管理生命周期。

这些示例展示了如何在Android应用中使用Kotlin协程进行基本的异步操作。通过合理使用这些工具,你可以编写出更加高效、响应更快的Android应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值