使用协同程序执行Android Kotlin任务

红死II

例如,我正在使用FusedLocationProviderClient访问当前位置,它返回一个任务,回调将最终返回该位置。该方法如下所示:

fun getLocation(callback: MyCallback){
    val flpc = LocationServices.getFusedLocationProviderClient(it)
    flpc.lastLocation.addOnSuccessListener {
        callback.onLocation(it)
    }
}

是否可以对其进行转换,以便我可以使用例程来挂起此函数并等待返回的任务,flpc.lastLocation以便可以用此方法将其返回,从而摆脱该回调?例如这样的事情:

suspend fun getLocation(): Location? =
    withContext(Dispachers.IO){
        val flpc = LocationServices.getFusedLocationProviderClient(it)
        return@withContext flpc.lastLocation.result()
    }

我的问题是协程周围是否有东西可以返回a的结果Task(在本例中为a Task<Location>

提前致谢!

基斯凯

kotlinx-coroutines-play-services图书馆有一个Task<T>.await(): T帮手。

import kotlinx.coroutines.tasks.await

suspend fun getLocation(): Location? = 
    LocationServices.getFusedLocationProviderClient(context).lastLocation.await()

或者查看阻止任务

它将以另一种方式使用:

suspend fun getLocation(): Location? =
    withContext(Dispachers.IO){
        val flpc = LocationServices.getFusedLocationProviderClient(context)
        try{
            return@withContext Tasks.await(flpc.lastLocation)
        catch(ex: Exception){
            ex.printStackTrace()
        }
        return@withContext null
    }

仅出于示例目的,添加到此示例中,getLocation()将以以下方式完成对的调用

coroutineScope.launch(Dispatchers.Main) {
    val location = LocationReceiver.getLocation(context)
    ...
}

但是,这通过不利用可用的回调并阻塞IO调度程序上的线程而否定了协程的好处,并且如果可用,则不应使用协程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用协同程序依次执行操作?

来自分类Dev

以正确的方式使用协同程序

来自分类Dev

如何从Java的执行人在Android中科特林的协同程序有什么不同?

来自分类Dev

如何停止协同程序?

来自分类Dev

使用gradle-script-kotlin中的ant任务

来自分类Dev

使用 Kotlin 实现插件时,如何为 Gradle 扩展任务?

来自分类Dev

具有外部功能的协同程序

来自分类Dev

Android Kotlin协同例程异常

来自分类Dev

将带协同程序的实时数据使用何时使用generate()而不是postValue

来自分类Dev

重复构建失败“要使用协同程序功能,必须添加`ktx`......。”

来自分类Dev

如何在Android上使用协同程序进行有无中断的取消,包括根据生命周期自动取消?

来自分类Dev

在Docker中构建Kotlin JS项目时,任务':rootPackageJson'的执行失败

来自分类Dev

构建iOS应用程序时Kotlin / Native compileKotlinIosX64任务失败

来自分类Dev

使用执行程序框架执行多个任务

来自分类Dev

链ASYNCIO协同程序内嵌在asyncio.gather

来自分类Dev

如何在协同程序中进行同步呼叫

来自分类Dev

Kotlin协程和Android-获取Firestore查询任务结果的结果

来自分类Dev

具有协同程序上下文的Android WorkManager在同步模式下不起作用

来自分类Dev

如何知道当Kotlin协程使用Task <T> API时任务是否失败?

来自分类Dev

我无法使用房间数据库和协同程序在recyclerview中删除项目

来自分类Dev

任务应用程序:proguardRelease的Android执行失败

来自分类Dev

没有应用程序可以使用 Kotlin 执行此操作 Android Intent

来自分类常见问题

如何使用Windows任务计划程序自动执行PowerShell脚本?

来自分类Dev

使用.bat文件和任务计划程序执行.vbs文件

来自分类Dev

使用.bat文件和任务计划程序执行.vbs文件

来自分类Dev

任务计划程序未执行程序

来自分类Dev

Android:任务“:dexDebug”的执行失败

来自分类Dev

Kotlin / anko多个异步任务

来自分类Dev

如何使用单独的任务执行程序阻止Netty中的子任务?

Related 相关文章

  1. 1

    如何使用协同程序依次执行操作?

  2. 2

    以正确的方式使用协同程序

  3. 3

    如何从Java的执行人在Android中科特林的协同程序有什么不同?

  4. 4

    如何停止协同程序?

  5. 5

    使用gradle-script-kotlin中的ant任务

  6. 6

    使用 Kotlin 实现插件时,如何为 Gradle 扩展任务?

  7. 7

    具有外部功能的协同程序

  8. 8

    Android Kotlin协同例程异常

  9. 9

    将带协同程序的实时数据使用何时使用generate()而不是postValue

  10. 10

    重复构建失败“要使用协同程序功能,必须添加`ktx`......。”

  11. 11

    如何在Android上使用协同程序进行有无中断的取消,包括根据生命周期自动取消?

  12. 12

    在Docker中构建Kotlin JS项目时,任务':rootPackageJson'的执行失败

  13. 13

    构建iOS应用程序时Kotlin / Native compileKotlinIosX64任务失败

  14. 14

    使用执行程序框架执行多个任务

  15. 15

    链ASYNCIO协同程序内嵌在asyncio.gather

  16. 16

    如何在协同程序中进行同步呼叫

  17. 17

    Kotlin协程和Android-获取Firestore查询任务结果的结果

  18. 18

    具有协同程序上下文的Android WorkManager在同步模式下不起作用

  19. 19

    如何知道当Kotlin协程使用Task <T> API时任务是否失败?

  20. 20

    我无法使用房间数据库和协同程序在recyclerview中删除项目

  21. 21

    任务应用程序:proguardRelease的Android执行失败

  22. 22

    没有应用程序可以使用 Kotlin 执行此操作 Android Intent

  23. 23

    如何使用Windows任务计划程序自动执行PowerShell脚本?

  24. 24

    使用.bat文件和任务计划程序执行.vbs文件

  25. 25

    使用.bat文件和任务计划程序执行.vbs文件

  26. 26

    任务计划程序未执行程序

  27. 27

    Android:任务“:dexDebug”的执行失败

  28. 28

    Kotlin / anko多个异步任务

  29. 29

    如何使用单独的任务执行程序阻止Netty中的子任务?

热门标签

归档