Android 11下ConnectivityManager$TooManyRequestsException问题求助
关于Android 11上ConnectivityManager$TooManyRequestsException的问题
注意:请勿将此标记为重复问题,现有回答未解决我的疑问
更新(6月28日周三):发现该问题仅出现在Android 11设备上。
我添加了一个回调用于通知设备是否联网,但Firebase中出现了如下异常,我在应用中从未遇到过该问题,以下是异常日志:
Exception android.net.ConnectivityManager$TooManyRequestsException: at android.net.ConnectivityManager.convertServiceException (ConnectivityManager.java:3698) at android.net.ConnectivityManager.sendRequestForNetwork (ConnectivityManager.java:3886) at android.net.ConnectivityManager.registerDefaultNetworkCallback (ConnectivityManager.java:4378) at android.net.ConnectivityManager.registerDefaultNetworkCallback (ConnectivityManager.java:4345) at com.myapp.android.core.network.PieConnectionStatusWatcher.registerCallback (SourceFile:38) at com.myapp.android.core.network.NetworkStateMonitor.addCallback (SourceFile:62) at com.myapp.android.core.mvvm.repository.MyDataRepository.notifyIfAppIsOnline (SourceFile:161) at com.myapp.android.banner.viewmodel.MyViewModel.startReloadIfAppIsOnlineAgain (SourceFile:287) at com.myapp.android.viewmodel.MyViewModel.onAdLoadingFailed (SourceFile:262) at com.myapp.android.core.mvvm.repository.MyDataRepository.lambda$loadAd$2 at android.os.Handler.handleCallback (Handler.java:938) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loop (Looper.java:257) at android.app.ActivityThread.main (ActivityThread.java:8390) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:603) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:947)
我已按照部分解决方案的要求添加并移除回调,代码如下:
注册回调:
connectivityManager = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager connectivityManager?.registerDefaultNetworkCallback(connectionCallback)
注销回调:
connectivityManager?.unregisterNetworkCallback(connectionCallback)
但仍能看到崩溃,请问原因是什么?该如何修复?
添加网络回调的条件是API调用因网络不可用失败时,注销回调的时机为用户重新联网或Activity销毁时,相关代码如下:
public Object notifyIfAppIsOnline(Runnable onAppIsOnline) { NetworkStateMonitor.Callback connectionStateListener = new NetworkStateMonitor.Callback() { @Override public void onNetworkStateChanged(boolean isOnline) { if (isOnline) { networkStateMonitor.removeCallback(this); onAppIsOnline.run(); } } }; networkStateMonitor.addCallback(connectionStateListener); return connectionStateListener; } public void onDestroy() { if (appIsOnlineNotification != null) { myRepository.cancelAppOnlineNotification(appIsOnlineNotification); } }
内容的提问来源于stack exchange,提问作者amodkanthe
相关产品推荐
相关产品推荐

