如何通过Kotlin协程, 简化"连续依次弹窗(Dialog队列)"的需求

效果预览

代码预览

kotlin 复制代码
lifecycleScope.launch {
    showDialog("签到活动", "签到领10000币") // 直到dialog被关闭, 才会继续运行下一行
    showDialog("新手任务", "做任务领20000币") // 直到dialog被关闭, 才会继续运行下一行
    showDialog("首充奖励", "首充6元送神装")
}

代码实现

要做到上一个showDialig()在关闭时才继续运行下一个函数,需要用到协程挂起的特性, 然后在 OnDismiss()回调中将协程恢复, 为了将这种基于回调的方法包装成协程挂起函数, 可以使用suspendCancellableCoroutine函数

kotlin 复制代码
suspend fun showDialog(title: String, content: String) = suspendCancellableCoroutine { continuation ->
    MaterialAlertDialogBuilder(this)
        .setTitle(title)
        .setMessage(content)
        .setPositiveButton("我知道了") { dialog, which ->
            dialog.dismiss()
        }
        .setOnDismissListener {
            continuation.resume(Unit)
        }
        .show()
}
相关推荐
李艺为14 小时前
Fake Device Test作假屏幕分辨率分析
android·java
zh_xuan15 小时前
github远程library仓库升级
android·github
峥嵘life15 小时前
Android蓝牙停用绝对音量原理
android
小书房15 小时前
Kotlin的内联函数
java·开发语言·kotlin·inline·内联函数
czlczl2002092516 小时前
IN和BETWEEN在索引效能的区别
android·adb
Volunteer Technology16 小时前
ES高级搜索功能
android·大数据·elasticsearch
北京自在科技16 小时前
Find Hub App 小更新
android·ios·安卓·findmy·airtag
lbb 小魔仙17 小时前
2026远程办公软件夏季深度横测:ToDesk、向日葵、网易UU远程全面对比,远控白皮书
android·服务器·网络协议·tcp/ip·postgresql
coding_fei17 小时前
AudioServer初始化过程
android
brucelee18617 小时前
Docker 运行 Android 模拟器
android·docker·容器