首页 > 其他分享 >Android协程的使用场景

Android协程的使用场景

时间:2024-09-03 09:47:48浏览次数:11  
标签:场景 协程 val androidx kotlinx coroutines growZone import Android

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext

    suspend fun allPlants(): List<Plant> = withContext(Dispatchers.Default) {
        delay(1500)
        val result = sunflowerService.getAllPlants()
        result.shuffled()
    }
import kotlinx.coroutines.flow.Flow

    @Query("SELECT * from plants ORDER BY name")
    fun getPlantsFlow(): Flow<List<Plant>>
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapLatest

    private val growZoneFlow = MutableStateFlow<GrowZone>(NoGrowZone)

    val plantsUsingFlow: LiveData<List<Plant>> = growZoneFlow.flatMapLatest { growZone ->
            if (growZone == NoGrowZone) {
                plantRepository.plantsFlow
            } else {
                plantRepository.getPlantsWithGrowZoneFlow(growZone)
            }
        }.asLiveData()

    init {
        clearGrowZoneNumber()

        growZoneFlow.mapLatest { growZone ->
                _spinner.value = true
                if (growZone == NoGrowZone) {
                    plantRepository.tryUpdateRecentPlantsCache()
                } else {
                    plantRepository.tryUpdateRecentPlantsForGrowZoneCache(growZone)
                }
            }
            .onEach { _spinner.value = false }
            .catch { throwable ->  _snackbar.value = throwable.message  }
            .launchIn(viewModelScope)
    }
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch

    private fun launchDataLoad(block: suspend () -> Unit): Job {
        return viewModelScope.launch {
            try {
                _spinner.value = true
                block()
            } catch (error: Throwable) {
                _snackbar.value = error.message
            } finally {
                _spinner.value = false
            }
        }
    }
import androidx.work.CoroutineWorker
import androidx.work.ListenableWorker
import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerFactory
import androidx.work.WorkerParameters

class RefreshMainDataWork(context: Context, params: WorkerParameters, private val network: MainNetwork) :
        CoroutineWorker(context, params) {

    /**
     * Refresh the title from the network using [TitleRepository]
     *
     * WorkManager will call this method from a background thread. It may be called even
     * after our app has been terminated by the operating system, in which case [WorkManager] will
     * start just enough to run this [Worker].
     */
    override suspend fun doWork(): Result {
        val database = getDatabase(applicationContext)
        val repository = TitleRepository(network, database.titleDao)

        return try {
            repository.refreshTitle()
            Result.success()
        } catch (error: TitleRefreshError) {
            Result.failure()
        }
    }

    class Factory(val network: MainNetwork = getNetworkService()) : WorkerFactory() {
        override fun createWorker(appContext: Context, workerClassName: String, workerParameters: WorkerParameters): ListenableWorker? {
            return RefreshMainDataWork(appContext, workerParameters, network)
        }

    }
}
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeout

    /**
     * This API is exposed for callers from the Java Programming language.
     *
     * The request will run unstructured, which means it won't be able to be cancelled.
     *
     * @param titleRefreshCallback a callback
     */
    fun refreshTitleInterop(titleRefreshCallback: TitleRefreshCallback) {
        val scope = CoroutineScope(Dispatchers.Default)
        scope.launch {
            try {
                refreshTitle()
                titleRefreshCallback.onCompleted()
            } catch (throwable: Throwable) {
                titleRefreshCallback.onError(throwable)
            }
        }
    }
}

 

标签:场景,协程,val,androidx,kotlinx,coroutines,growZone,import,Android
From: https://www.cnblogs.com/maowuge/p/18393964

相关文章

  • 如果我想在Android应用中实现资源的自动管理,除了try-with-resources语句,还有哪些设计
    在Android应用开发中,除了使用try-with-resources语句来实现资源的自动管理,还可以参考以下设计模式和最佳实践:1.**单例模式(Singleton)**:  -对于需要全局访问的资源,如数据库连接或共享的配置对象,可以使用单例模式来确保只有一个实例被创建,并在应用的整个生命周期中复用。2......
  • 反射内存卡的使用场景
    反射内存卡使用场景航空航天与国防1.飞行模拟器:用于实时模拟飞行器的各种状态和参数,确保多个模拟器节点之间的数据同步。2.武器系统:在分布式武器控制和指挥系统中实现快速数据共享,提高响应速度。3.卫星控制系统:保障卫星各子系统之间的数据实时交换。工业自动化1.制造生产线:......
  • uniapp精仿微信源码,基于SumerUI 3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值
    sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享源码说明:本源码包只提供1.0版本,只有1.0版本是开源的,提供给大家学习研究。源码使用Hbui......
  • Android之电量优化
    目录1.减少不必要的网络请求2.优化位置服务3.优化后台任务4.优化图像和动画(界面渲染)5.避免后台服务常驻6.优化电量使用的监控在Android应用开发中,电量优化是一个非常重要的方面,因为用户对设备电量的敏感性很高。1.减少不必要的网络请求网络请求是耗电大户,尤......
  • android AccessibilityService合法合规采集大众点评app商店商品详情(2024-09-02)
    免责任声明:任何可操作性的内容与本人无关,文章内容仅供参考学习,如有侵权损害贵公司利益,请联系作者,会立刻马上进行删除。一、原理介绍1、打开大众点评app商店publicvoidopen_shop(Contextcontext,Stringshop_id){Stringurl="dianping://gcshopshell?shop......
  • android AccessibilityService合法合规增加小红书笔记曝光阅读量(2024-09-02)
    免责任声明:任何可操作性的内容与本人无关,文章内容仅供参考学习,如有侵权损害贵公司利益,请联系作者,会立刻马上进行删除。一、分析目前可增加曝光阅读流量渠道入口(完成)1.发现页打开小红书app选择顶部发现页(完成)2.搜索页打开小红书app点击右上角搜索,进入搜索结果页(完成)3.......
  • 助力移动道路交通环保治理,打赢蓝天保卫战,基于YOLO家族最新端到端实时算法YOLOv10全系
    在快速发展的现代社会中,工业化的步伐虽推动了城市的繁荣,但环保问题也随之成为我们不得不面对的重大挑战。特别是在移动道路交通领域,路边与路面裸土堆积、道路扬尘等问题,不仅影响城市形象,更对空气质量与居民健康构成了严重威胁。面对这一现状,传统的监测治理手段已难以满足高效、......
  • 解析 Agent 在国外智慧金融领域的一个落地场景:智能顾投
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    随着这两年蓬勃发展的人工智能技术在金融投资领域和股票证券市场的逐步推广运用,基于金融大模型的智能体(Agent)在智慧顾问投资领域就越来越多引发人们的关注了,本文将简介目前国外将其主要服务于哪些场......
  • Android 9.0 内置google tts语音包功能实现
    1.前言 在9.0的产品开发中,在gms的相关项目对于文字转语音包功能不是内置功能,需要自己下载google的tts语音包,然后内置,在设置googletts语音包apk作为默认的tts语音引擎功能,接下来分析实现这个功能2.内置googletts语音包功能实现的核心类frameworks/base/core/java/androi......
  • ROS2- Moveit2 -Planning Scene ROS API (规划场景 ROS API)
    在本教程中,我们将研究如何使用规划场景差异来执行两项操作:在世界中添加和移除物体将物体安装到机器人上或从机器人上卸下入门如果您还没有这样做,请确保您已经完成入门指南中的步骤。运行代码打开两个shell。在第一个shell中启动RViz并等待所有内容完成加载:ros......