10

After continuos use of application on Android Nougat 7.1.1 it started crashing in background, until started up manually. From Firebase I got following log:

Caused by java.lang.IllegalArgumentException: Too many NetworkRequests filed
android.os.Parcel.readException (Parcel.java:1688)
android.os.Parcel.readException (Parcel.java:1637)
android.net.IConnectivityManager$Stub$Proxy.pendingListenForNetwork (IConnectivityManager.java:2460)
android.net.ConnectivityManager.registerNetworkCallback (ConnectivityManager.java:3127)
com.XXX.XX.location.GPSControl$Companion.setInitialized (GPSControl.java)
__null__.getGApiClient (GPSControl.java)
__null__.setGApiClient (GPSControl.java)
__null__.setConnMan (GPSControl.java)
__null__.setSf (GPSControl.java)
__null__.init (GPSControl.java)
__null__.getPI (GPSControl.java)
__null__.triggerLocation (GPSControl.java)
__null__.triggerLocation$default (GPSControl.java)
__null__.access$getInitialized$p (GPSControl.java)
com.XXX.XX.KGL.afterLoginSetup (KGL.java)
com.XXX.XX.KGL.onCreate (KGL.java)
android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1025)
android.app.ActivityThread.handleBindApplication (ActivityThread.java:5460)
android.app.ActivityThread.-wrap2 (ActivityThread.java)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1556)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6176)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:888)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:778)

I checked android marshmallow source code, it doesn't contain code, that throws this error, but master branch does, so we can conclude this error is Nougat specific.

    private void enforceRequestCountLimit() {
        synchronized (mUidToNetworkRequestCount) {
            int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1;
            if (networkRequests >= MAX_NETWORK_REQUESTS_PER_UID) { //MAX_NETWORK_REQUESTS_PER_UID == 100
                throw new IllegalArgumentException("Too many NetworkRequests filed");
            }
            mUidToNetworkRequestCount.put(mUid, networkRequests);
        }
    }

How often does counter of request resets?

How I can get current network request count to decrease activity when it's close to limit?

Dmytro Rostopira
  • 10,588
  • 4
  • 64
  • 86
  • 13
    From my reading of the source code, you might get this from too many `registerNetworkCallback()` calls without corresponding `unregisterNetworkCallback()` calls. Make sure that you are cleaning up these callbacks. – CommonsWare Jan 31 '17 at 13:06
  • the same thing happens to me. at random times :( – YellowJ Aug 24 '17 at 13:31
  • @YellowJ I've found several `registerNetworkCallback()` in my code, removed it and now everything fine, thanks to @CommonsWare – Dmytro Rostopira Aug 25 '17 at 12:31
  • @DimaRostopira Yes indeed. it is in the 3rd party library I am using. Thanks! – YellowJ Sep 28 '17 at 03:44

1 Answers1

8

Quoting @CommonsWare from the question comments:

From my reading of the source code, you might get this from too many registerNetworkCallback() calls without corresponding unregisterNetworkCallback() calls. Make sure that you are cleaning up these callbacks. – CommonsWare Jan 31 '17 at 13:06

Nino van Hooff
  • 3,677
  • 1
  • 36
  • 52
  • 1
    What if I don't register networkCallbacks .... ( I don't know. Maybe retrofit is doing it under the hood? – StayCool Jul 21 '20 at 08:09