android - Tasks.await(task)显示不适当的阻塞方法调用警告

标签 android kotlin async-await kotlin-coroutines suspend

我正在尝试通过我的代码通过Google登出:

suspend fun signOut(context: Context): Boolean = with(Dispatchers.IO) {
    try {
        val signOutTask = GoogleSignIn.getClient(context, 
        getGoogleSignInOptionsBuilder()).signOut()
        Tasks.await(signOutTask)
        true
    } catch (e: ExecutionException) {
        false
    } catch (e: InterruptedException) {
        false
    }
}
signOutTask是Task(Void),我希望它同步返回。
但在以下行中:
Tasks.await(signOutTask)
它显示了不适当的阻塞方法调用
感谢您的帮助!

最佳答案

当将Kotlin Coroutines与Google Play服务的API结合使用时,您应该使用 kotlinx-coroutines-play-services ,它可以正确完成工作,将Task API转换为suspend API,而不会阻塞线程:

// In your dependencies block of your build.gradle
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.9"
这使您可以将代码编写为:
suspend fun signOut(context: Context): Boolean = try {
    val signOutTask = GoogleSignIn.getClient(context,
         getGoogleSignInOptionsBuilder()).signOut()
    signOutTask.await()
    true
} catch (e: Exception) {
    false
}

关于android - Tasks.await(task)显示不适当的阻塞方法调用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63678229/

相关文章:

android - 如何更新 ImageView 中的位图

Android OpenGL ES 2,绘制正方形

kotlin intProgression 不迭代?

angular - 将异步函数转换为 RxJs Observable

node.js - NodeJS SetInterval 与 Async/Await

c# - 有没有办法同步运行异步 lambda?

Android Studio 继续获得 Unsupported major.minor 版本 52.0

android - 工具栏标题全宽

android - 从 Adapter 中的 Resources 获取一个字符串

android - 在调试器工具窗口中看不到协程选项卡