• android NetworkMonitor和ConnectivityService记录


    一、NetworkMonitor

    packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java

    网络上都叫网络可用性校验,在WIFI和数据(以太网切换中使用)

    有多个状态机

    方法:isCaptivePortal

    11-03 12:01:17.885  2535  4681 D NetworkMonitor/100: isCaptivePortal: isSuccessful()=false isPortal()=false RedirectUrl=null isPartialConnectivity()=false Time=23029ms

    类 EvaluationState下的reportEvaluationResult

    ----------------------------------------------------------------------------------------------------------------------

    父类下的notifyNetworkTested,会将校验结果发送给ConnectivityService

    1. private final INetworkMonitorCallbacks mCallback;
    2. private void notifyNetworkTested(NetworkTestResultParcelable result) {
    3. mCallback.notifyNetworkTestedWithExtras(result);
    4. }

    ConnectivityService.java里有个子类NetworkMonitorCallbacks 重写了notifyNetworkTestedWithExtras

    NetworkMonitorCallbacks是在registerNetworkAgent里注册的

    1. mDeps.getNetworkStack().makeNetworkMonitor(
    2. nai.network, name, new NetworkMonitorCallbacks(nai));

    -----------------------------------------------------------------------------------------------------------------------

    二、NetworkMonitor与ConnectivityService的回调

    class EvaluationState 应该是上报数据给ConnectivityService的 

    reportEvaluationResult

            notifyNetworkTested

                    mCallback.notifyNetworkTestedWithExtras

    isCaptivePortal

            else if (mUseHttps && httpsUrls.length == 1 && httpUrls.length == 1)

            sendHttpAndHttpsParallelWithFallbackProbes

                    reportHttpProbeResult(NETWORK_VALIDATION_PROBE_FALLBACK) (16)

                    reportHttpProbeResult(NETWORK_VALIDATION_PROBE_HTTPS) (32)

    packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java

    sendDnsProbe

            sendDnsProbeWithTimeout    //这个是阻塞执行

                    DnsUtils.getAllByName

    11-28 10:57:11.770  2414  4178 D NetworkMonitor/100: PROBE_DNS connectivitycheck.gstatic.com 12508ms FAIL in type ADDRCONFIG Timeout

    这个日志一直没找到在哪儿打印,后来发现是在这儿

    1. protected InetAddress[] sendDnsProbeWithTimeout(String host, int timeoutMs)
    2. throws UnknownHostException {
    3. return DnsUtils.getAllByName(mDependencies.getDnsResolver(), mCleartextDnsNetwork, host,
    4. TYPE_ADDRCONFIG, FLAG_EMPTY, timeoutMs,
    5. str -> validationLog(ValidationProbeEvent.PROBE_DNS, host, str));
    6. }
    7. private void validationLog(int probeType, Object url, String msg) {
    8. String probeName = ValidationProbeEvent.getProbeName(probeType);
    9. //自己加的日志
    10. Log.i(TAG, "validationLog, probeName = " + probeName + " url = " + url.toString());
    11. validationLog(String.format("%s %s %s", probeName, url, msg));
    12. }

  • 相关阅读:
    三维数模(.obj .stl)转化为点云
    学习ASP.NET Core Blazor编程系列七——新增图书
    P1192 台阶问题
    小学读背兴趣任务管理系统-计算机毕业设计源码
    C++基础教程(转载)
    操作系统------讲讲内存管理的历史(1)连续分配内存
    9.8挂分记录
    趣解设计模式之《办理入职这么难吗?》
    LeetCode 1417. 重新格式化字符串
    mysql8 源码安装的坑-放弃了
  • 原文地址:https://blog.csdn.net/yudelian/article/details/134204147