我有一個使用In App Billing v3 框架的 Google Play 應用。Google Play開發者控制臺報告頻繁崩潰java.lang.IllegalStateException事實上,我的大部分崩潰都是這種非法狀態異常。我使用 IAB 框架中的示例代碼來處理我的應用內購買。調用堆棧: at com.steenriver.armor.util.IabHelper.flagStartAsync (IabHelper.java:824) at com.steenriver.armor.util.IabHelper.queryInventoryAsync (IabHelper.java:616) at com.steenriver.armor.util.IabHelper.queryInventoryAsync (IabHelper.java:644) at com.steenriver.armor.ArmorActivity$1.onIabSetupFinished (ArmorActivity.java:185) at com.steenriver.armor.util.IabHelper$1.onServiceConnected (IabHelper.java:262) at android.app.LoadedApk$ServiceDispatcher.doConnected (LoadedApk.java:1625) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run (LoadedApk.java:1653) at android.os.Handler.handleCallback (Handler.java:836) at android.os.Handler.dispatchMessage (Handler.java:103) at android.os.Looper.loop (Looper.java:232) at android.app.ActivityThread.main (ActivityThread.java:6802) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1103) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:964)為了擺脫崩潰,我決定在代碼中添加異常處理,如下所示:try{ mHelper.launchPurchaseFlow( this, sku, RC_REQUEST, mPurchaseFinishedListener, payload );} catch( IllegalStateException e ){ Log.e( TAG, e.toString() ); // Illegal State: maybe purchase is already in progress? enableBuyButton(); // Enable buy button so customer can try again.}令我驚訝的是,添加了 try/catch 的新版本仍然會因相同的調用堆棧而崩潰。這是因為 IllegalStateException 根本無法被捕獲,還是什么?這里發生了什么?
1 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
如果您仔細查看您的調用堆棧,您會發現它不包含launchPurchaseFlow()
. try
塊只能從正確位于其中的代碼中捕獲異常,并且由于您的異常沒有發生在對 . 的任何調用中launchPurchaseFlow()
,因此它不會發生在您的try
.
launchPurchaseFlow()
導致計費狀態機開始推進,但并非每個購買操作都發生在該函數內。換句話說,購買是“異步”完成的。
從堆棧跟蹤中可以看出,異常實際上發生在 期間onServiceConnected()
,它是從Handler
回調中調用的。launchPurchaseFlow()
此時實際上已經返回;該try
塊是過去的。為了用 包圍這個特定的操作try
,您實際上需要編輯一個IabHelper
方法,例如onServiceConnected()
. 不建議這樣做,因為您自己的代碼中的一些其他錯誤似乎導致了異常。這是應該修復的。
順便說一句,我找不到flagStartAsync()
拋出的 v3 計費庫版本IllegalStateException
,所以我不確定這是怎么回事。
必須提及:IabHelper
顯然不再受 Google 支持;您應該改用計費客戶端庫。您發布的鏈接不再引用您正在使用的庫。
添加回答
舉報
0/150
提交
取消