📘 2 · Kotlin协程环境搭建

Compose 实战
🧩 添加依赖 ⚙️ 配置Gradle 🚀 第一个协程示例

📋 核心依赖 (build.gradle.kts)

配置项依赖声明说明
Kotlin BOMimplementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.22"))统一 Kotlin 版本
协程核心implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")协程基础能力
协程 Androidimplementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")Android 调度器
Lifecycle 协程implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")ViewModelScope / lifecycleScope
Compose 协程implementation("androidx.lifecycle:lifecycle-runtime-compose:2.7.0")rememberCoroutineScope

⚙️ Gradle 配置 (模块级 build.gradle.kts)

// 添加依赖 (在 dependencies 块内)
dependencies {
    // Kotlin BOM (版本对齐)
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.22"))

    // 协程核心 + Android
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")

    // Lifecycle 协程扩展 (ViewModelScope, lifecycleScope)
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")

    // Compose 中 rememberCoroutineScope
    implementation("androidx.lifecycle:lifecycle-runtime-compose:2.7.0")

    // 如果你使用 ViewModel
    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")
}

🧭 协程 + Compose 架构示意

🖥️ Compose UI @Composable / State 🔁 协程作用域 rememberCoroutineScope 📦 kotlinx.coroutines Dispatchers / Job ⬆️ Compose 通过协程执行异步任务 (网络/数据库/延迟) lifecycleScope / viewModelScope 自动管理生命周期

🚀 第一个协程示例 (Compose)

@Composable
fun CoroutineExample() {
    // 1. 获取协程作用域 (绑定 Composable 生命周期)
    val scope = rememberCoroutineScope()
    var message by remember { mutableStateOf("点击按钮启动协程") }

    Column(modifier = Modifier.padding(24.dp)) {
        Text(text = message, fontSize = 20.sp, color = Color(0xFF2C3E6B))

        Spacer(modifier = Modifier.height(16.dp))

        Button(
            onClick = {
                // 2. 启动协程
                scope.launch {
                    message = "⏳ 协程启动,等待 2 秒..."
                    delay(2000)               // 挂起,不阻塞 UI
                    message = "✅ 协程执行完毕!当前线程: ${Thread.currentThread().name}"
                }
            },
            colors = ButtonDefaults.buttonColors(
                containerColor = Color(0xFFF7B731)
            )
        ) {
            Text("启动协程", fontWeight = FontWeight.Bold)
        }
    }
}
✅ 插件 & 编译配置
// 项目级 build.gradle.kts
plugins {
    id("org.jetbrains.kotlin.android") version "1.9.22" apply false
    id("org.jetbrains.kotlin.plugin.compose") version "1.9.22" apply false  // Compose 编译器插件
}

// 模块级 build.gradle.kts
plugins {
    id("org.jetbrains.kotlin.android")
    id("org.jetbrains.kotlin.plugin.compose")
}

android {
    compileSdk = 34
    kotlinOptions {
        jvmTarget = "17"
    }
}