У меня есть приложение Google Play, в котором используется In App Billing v3 framework.
Консоль разработчика 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 невозможновсе или что?Что здесь происходит?