为什么querySkuDetails需要在IO上下文中运行?

2024-04-23

根据https://developer.android.com/google/play/billing/integrate https://developer.android.com/google/play/billing/integrate the billingClient.querySkuDetails被称为withContext(Dispatchers.IO)

fun querySkuDetails() {
    val skuList = ArrayList<String>()
    skuList.add("premium_upgrade")
    skuList.add("gas")
    val params = SkuDetailsParams.newBuilder()
    params.setSkusList(skuList).setType(SkuType.INAPP)
    val skuDetailsResult = withContext(Dispatchers.IO) {
        billingClient.querySkuDetails(params.build())
    }
    // Process the result.
}

我很好奇它能带来什么好处querySkuDetails已经是一个暂停函数。那么我在这里能得到什么。

我可以编写相同的代码

val skuDetailsResult = coroutineScope {
        billingClient.querySkuDetails(params.build())
}

没有更多的上下文,我不知道如何下载计费客户端的源代码。


被调用的底层方法是querySkuDetailsAsync它接受回调并异步执行网络请求。

你是对的withContext(Dispatchers.IO)那里不需要,它实际上引入了不必要的开销。

取自https://stackoverflow.com/a/62182736/6167844 https://stackoverflow.com/a/62182736/6167844

这似乎是一个常见的误解,因为 IO 是由挂起函数执行的,所以您必须在 Dispatchers.IO 中调用它,这是不必要的(并且可能很昂贵)。

按照惯例,挂起函数不会阻塞调用线程,并在需要时在 Dispatchers.IO 中内部阻塞。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么querySkuDetails需要在IO上下文中运行? 的相关文章

随机推荐