android - android ANR BillingClient.queryPurchases
问题描述
我正在使用 Google 计费服务,版本 2.0.3。BillingClient.queryPurchases
在Activity的onstart方法中运行UI线程中的方法,用户有时会遇到如下Application Not Responding错误:
THREADS:
"main" prio=5 tid=1 TimedWaiting
| group="main" sCount=1 dsCount=0 obj=0x73b04268 self=0xa5905400
| sysTid=8394 nice=-4 cgrp=default sched=0/0 handle=0xa85ae534
| state=S schedstat=( 0 0 0 ) utm=2439 stm=491 core=1 HZ=100
| stack=0xbe437000-0xbe439000 stackSize=8MB
| held mutexes=
at java.lang.Object.wait! (Native method)
- waiting on <0x05482764> (a java.lang.Object)
at java.lang.Thread.parkFor$ (Thread.java:2127)
- locked <0x05482764> (a java.lang.Object)
at sun.misc.Unsafe.park (Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:201)
at java.util.concurrent.FutureTask.awaitDone (FutureTask.java:418)
at java.util.concurrent.FutureTask.get (FutureTask.java:176)
at com.android.billingclient.api.BillingClientImpl.queryPurchases (BillingClientImpl.java:699)
解决此类 ANR 的最佳方法是什么?
解决方案
从Google Play 结算库4.0.0 版开始,您可以使用BillingClient.queryPurchasesAsync()
.
BillingClient.queryPurchases()
将在未来的版本中删除。
implementation("com.android.billingclient:billing:4.0.0")
billingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP, (billingResult1, list) -> {
...
});
推荐阅读
- python - 我怎样才能让这个数据框显示最经常出现的单词
- pandas - 为什么我的代码在 1 列中给我数据,它应该在两个不同的列中给我
- php - 在 PHP 中处理 Cobol 文件和工作簿
- haskell - 如何创建一种特殊的列表?
- c++ - 使用 C++/Qt(已知密码)打开加密的 PDF
- sql - 如何修复 psql ubuntu 中“psql”处或附近的语法错误
- python - BeautifulSoup4 .get('href') 不仅返回href,还返回一些垃圾
- swift - 按下应用通知总是会激活应用窗口
- node.js - 带有 Heroku 的 Nodejs 应用程序在“反应脚本:权限被拒绝”上失败
- mongodb - MongoDB 基于字段的随机样本(机会)