关于Android ConnectivityService与TooManyRequestsException的问题求助
关于ConnectivityManager$TooManyRequestsException的排查求助
崩溃堆栈信息
Caused by: android.net.ConnectivityManager$TooManyRequestsException at android.net.ConnectivityManager.convertServiceException(ConnectivityManager.java:3510) at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3714) at android.net.ConnectivityManager.registerNetworkCallback(ConnectivityManager.java:4035) at android.net.ConnectivityManager.registerNetworkCallback(ConnectivityManager.java:4016) at com.tonyodev.fetch2.provider.NetworkInfoProvider.<init>(NetworkInfoProvider.kt:82) at com.tonyodev.fetch2.fetch.e$b.<init>(FetchModulesBuilder.kt:103) at com.tonyodev.fetch2.fetch.e.a(FetchModulesBuilder.kt:199)
已完成的排查
- 确认代码中fetch2是单例,排除其导致该崩溃的可能
- 反射检查ConnectivityManager的静态变量
sCallbacks,确认应用中最多仅注册15个回调,因此崩溃并非由回调过多导致 - 定位到ConnectivityService中抛出异常的核心代码:
private void enforceRequestCountLimit() { synchronized (mUidToNetworkRequestCount) { int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1; if (networkRequests >= MAX_NETWORK_REQUESTS_PER_UID) { throw new ServiceSpecificException( ConnectivityManager.Errors.TOO_MANY_REQUESTS); } mUidToNetworkRequestCount.put(mUid, networkRequests); } }
该方法属于ConnectivityService的内部类NetworkRequestInfo,每次创建NetworkRequestInfo对象时计数会加1,达到阈值时触发异常。
求助问题
从代码逻辑推测,除ConnectivityManager.registerNetworkCallback外,还有其他操作会创建NetworkRequestInfo对象,但目前不清楚具体是哪些操作,希望得到相关信息。
内容的提问来源于stack exchange,提问作者developerzjy
相关产品推荐
相关产品推荐

