In-app billing (v3) - IllegalArgumentException: Service not registered:

I have just released an app with in-app billing. So far no crashes have been reported to google play (this only happens when the user takes the trouble to report the crash) but I do have some reports of crashes via flurry (which is automatic). The crash reports are as follows:

class java.lang.RuntimeException
Msg: android.app.ActivityThread.performDestroyActivity:3655 (Unable to destroy activity {com.mycompany.mygame/com.mycompany.mygame.Splashscreen}: java.lang.IllegalArgumentException: Service not registered: com.mycompany.mygame.util.IabHelper$1@46369b38)

This only happens on < 1% of executions of my app.

Correct me if I'm wrong, but it appears that the line number of the crash is not given in the flurry report :-(

I'm not even sure what this crash report means, let alone how to fix it. Any ideas?


Solution 1:

I believe this is a bug in IabHelper.java.

In IabHelper dispose method, the following line,

            if (mContext != null) mContext.unbindService(mServiceConn);

should be changed to this.

            if (mContext != null && mService != null) mContext.unbindService(mServiceConn);

mService is only set once the Service has been registered, so checking it for != null will guarantee that service is indeed registered, before we try to unbind from it.