我使用谷歌提供的代码( IabHelper.java 等)在我的Android应用中设置应用内结算。提供的代码是异步的,因为我需要指定一个回调函数,该函数在成功绑定服务时会很有用。
但是,我发现自己需要掌握有关不同活动的当前订阅的信息。所以我决定在Activity的onCreate方法中同步绑定计费服务并将其保存在静态变量中。这应该相对较快,因为Google Play服务会进行一些缓存。我使用的代码如下:
// this - current activity
CountDownLatch latch = new CountDownLatch(1);
mService = new BillingService(this, latch);
try {
latch.await();
} catch (InterruptedException ignored) {}
然后在onIabSetupFinished
我致电latch.countDown()
。不幸的是,countDown
永远不会被执行,而我的代码仍然停留在await()
中。有谁知道如何解决这个问题或建议替代解决方案?
答案 0 :(得分:1)
onIabSetupFinished()
从ServiceConnection.onServiceConnected()
调用,计划在您应用的主线程上执行。由于您使用latch.await()
阻止主线程,因此无法运行。
您无法阻止该应用,而只是显示不可取消的ProgressDialog
,直到您从IAB服务获取信息。