IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> kotlin 异步流 -> 正文阅读

[移动开发]kotlin 异步流

//1.表示多个值  流用于返回多个异步计算值
    fun foo(): List<Int> = listOf(1, 2, 3)
    fun forEachList() {
        foo().forEach { value -> println(value) }
    }

    //2.序列
    fun foos(): Sequence<Int> = sequence {//使用一个序列(Sequence)来表示数字
        for (i in 1..3) {
            Thread.sleep(1000)//等待100毫秒
            yield(i)//下一个值
        }
    }

    fun forEachSequences() {
        foos().forEach { value -> println(value) }
    }

    //3 挂起函数
    suspend fun foo_Suspending(): List<Int> {//suspend修饰不会阻塞主线程 ,List<Int>我们只能同时返回所有值
        delay(1000)
        return listOf(1, 2, 3)
    }

    fun main_Suspending() = runBlocking {
        foo_Suspending().forEach { value -> println(value) }
    }

    //4.Flows
    fun foo_flows(): Flow<Int> = flow {//构造器函数名为 flow 不再标记 suspend 修饰符
        for (i in 1..3) { //flow{...} 中的代码块可以挂起
            delay(2000)
            emit(i)//值通过 emit 函数从流中发出
        }
    }
    fun main_flows()= runBlocking<Unit> {
        launch {//用于检查主线程是否阻塞
            for (k in 1..3){
                println("k $k")
                delay(1000)//等待1000毫秒 不会阻塞主线程
            }
        }
        foo_flows().collect { value -> println("$value")  }// collect 函数从 flow 中取值
    }
    //5.流是冷的
    fun foo_cold():Flow<Int> = flow {
        for (i in 1..3){//flow 每次收集时都会启动
            println("Flow开启")
            delay(1000)
            emit(i)
        }
    }
    fun main_cold()= runBlocking {
        val flows=foo_cold()
        println("...$flows")
        flows.collect { value -> println("$value")}//先开启,再打印值
        println("...收集")
    }
    //6.取消流
    fun foo_cancel():Flow<Int> = flow {
        for (i in 1..3)
        {
            delay(1000)
            emit(i)
        }
    }
    fun main_cancel()= runBlocking {
        withTimeoutOrNull(1200){//运行一个就取消了
            foo_cancel().collect { value -> println("$value") }
        }
        println("end")
    }
    //7.流构建器 asFlow
    fun main_asFlow()= runBlocking {
        (1..3).asFlow().collect { value -> println("$value") }
    }
    //8.中间流运算符
    suspend fun per_request(requst:Int):String{
        delay(1000)
        return "$requst"
    }
    fun  main_map()= runBlocking {
        (1..3).asFlow()//构建流
            .map {  request->per_request(request)}//中间运算符
            .collect { value -> println("$value") }
    }
    //9.转换操作符
//    suspend fun per_request(requst:Int):String{
//        delay(1000)
//        return "$requst"
//    }
//    fun  main_map()= runBlocking {
//        (1..3).asFlow()//构建流
//            .map {  request->per_request(request)}//中间运算符
//            .collect { value -> println("$value") }
//    }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:30:10  更:2021-09-02 11:32:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 5:39:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码