首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >kotlin扩展功能是否在com.android.BillingClient:billing ktx内部分派给Dispatchers.IO?

kotlin扩展功能是否在com.android.BillingClient:billing ktx内部分派给Dispatchers.IO?
EN

Stack Overflow用户
提问于 2022-08-31 23:48:38
回答 1查看 83关注 0票数 2

阅读计费客户端的文档,有一个题为使用Kotlin扩展查询的部分。所示的示例包括对Dispatchers.IO的分派,如下所示:

代码语言:javascript
运行
复制
val productDetailsResult = withContext(Dispatchers.IO) {
    billingClient.queryProductDetails(params.build())
}

withContext也显示在其他挂起函数上。ktx和其他库中的queryProductDetails都是挂起函数。为什么文档中包含withContext?我无法想象做一个刚刚阻塞线程的挂起函数的目的,在我看来,它应该内部分派给Dispatchers.IO,使示例代码中的withContext调用变得多余。

我的评估是否正确,我是否可以省略withContext块而不阻塞主线程(假设调用上下文在Dispatchers.Main上)?我无法确定它对调试器做了什么,而且似乎没有任何关于扩展函数的文档。

我想写的是:

代码语言:javascript
运行
复制
val productDetailsResult = billingClient.queryProductDetails(params.build())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 09:14:04

反编译的Java queryProductDetails扩展函数代码如下所示:

代码语言:javascript
运行
复制
   @Nullable
   @RecentlyNonNull
   public static final Object queryProductDetails(@RecentlyNonNull BillingClient $this$queryProductDetails, @RecentlyNonNull QueryProductDetailsParams params, @RecentlyNonNull Continuation $completion) {
      final CompletableDeferred var3 = CompletableDeferredKt.CompletableDeferred$default((Job)null, 1, (Object)null);
      ProductDetailsResponseListener var4 = new ProductDetailsResponseListener() {
         public final void onProductDetailsResponse(BillingResult billingResult, List productDetailsList) {
            Intrinsics.checkNotNullExpressionValue(billingResult, "billingResult");
            ProductDetailsResult var3x = new ProductDetailsResult(billingResult, productDetailsList);
            var3.complete(var3x);
         }
      };
      $this$queryProductDetails.queryProductDetailsAsync(params, var4);
      return var3.await($completion);
   }

我们可以看到它在引擎盖下使用queryProductDetailsAsync,所以它异步运行。因此,我们可以得出这样的结论:调用没有阻塞,我们不需要将billingClient.queryProductDetails(params.build())包装到withContext(Dispatchers.IO)

代码语言:javascript
运行
复制
val productDetailsResult = billingClient.queryProductDetails(params.build())
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73562979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档