2014-06-29 13 views
0

我正在使用谷歌提供的代碼(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()。有誰知道如何解決這個問題或建議一種替代解決方案?

回答

1

onIabSetupFinished()ServiceConnection.onServiceConnected()調用,它被安排在您的應用程序的主線程上執行。它不能運行,因爲你阻止你的主線程latch.await()

您不能阻止應用程序,而只是顯示一個不可取消的ProgressDialog,直到您從IAB服務獲取信息。

+0

要繼續,我應該關閉從''onIabSetupFinished()''的對話框?那麼沒有其他辦法了? – dragoon

+0

準確地說,關閉'onIabSetupFinished()'中的對話框。主線程不僅僅用於UI,還用於服務連接回調和其他事情。所以阻止它不是一個好主意。 –

相關問題