kotlin 挂起函数

测试下挂起函数:

Kotlin 复制代码
// 1. 定义挂起函数(用suspend关键字修饰)
suspend fun suspendFunction(name: String, delayTime: Long) {
    Log.d("zxzx", "[$name] 挂起函数开始执行,当前线程:${Thread.currentThread().name}")

    // delay是Kotlin内置的挂起函数(核心:释放线程,不阻塞)
    delay(delayTime)

    Log.d("zxzx", "[$name] 挂起函数执行完毕,当前线程:${Thread.currentThread().name}")
}

// 2. 测试函数(Android环境可放在Activity/Fragment中,普通测试用main函数)
fun testSuspend() {
    Log.d("zxzx", "主线程开始,当前线程:${Thread.currentThread().name}")

    // 错误示例:普通函数中直接调用挂起函数 → 编译报错!
    // suspendFunction("错误测试", 1000L) // 编译提示:Suspend function 'suspendFunction' should be called only from a coroutine or another suspend function

    // 正确方式1:在runBlocking(协程作用域)中调用
    runBlocking {
        // 启动子协程调用挂起函数
        launch(Dispatchers.IO) {
            suspendFunction("测试1", 2000L)
        }
        launch(Dispatchers.Default) {
            suspendFunction("测试2", 1000L)
        }
    }

    // 正确方式2:Android中用lifecycleScope(推荐)
    // lifecycleScope.launch {
    //     suspendFunction("Android测试", 1500L)
    // }

    Log.d("zxzx", "主线程继续执行,当前线程:${Thread.currentThread().name}")
    Log.d("zxzx", "力拔山兮气盖世,\n时不利兮骓不逝。\n骓不逝兮可奈何,\n虞兮虞兮奈若何!")
}

在onCreate函数中调用testSuspend函数,打印:

ok. 这里好像没看出挂起有什么用。后面再继续研究。

相关推荐
朱涛的自习室3 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
死磕音视频4 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
顽疲7 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
.Bryce.7 小时前
在智能体中使用A2A工具:让大模型自己决定“该找谁帮忙“
android·java·服务器·redis·后端·agent·a2a
方舟小孩8 小时前
开源办公软件海豹办公 1.9.15 实战 从模板异常到 Android WebView 资源回归
android
用户2181697049309 小时前
Kotlin 语法四 协程
android
程序喵大人9 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
出师牛9 小时前
Android - 再探Handler
android
高晶9 小时前
Android 物联网组网实战:NFC 从零到落地
android·java