type
status
date
slug
summary
tags
category
icon
password
URL
基于andorid R梳理的wifi上网校验流程,其余android版本也差不多,相差不大
当我们连接wifi时,通常会遇到如下的log:
MtkConnectivityService: [113 WIFI] validation passed
此log显示当前网络为Wifi,并且validation passed。

那肯定是某个进程发送了EVENT_NETWORK_TESTED将valid/invalid的消息传了过来



NetworkMonitor里维护了一个状态机。

mThread.Start()将会启动isCapativePortal()函数

这个网址就是用来判断network validation的

这个也就对应上log中的:

network validation pass的流程
transitionTo(mEvalutingPrivateDnsState)

对应log中的
network validation failed的流程
第一次validation failed时会transmitionTo(mWaitingForNextProbeState),其实就是发送CMD_REEVALUTE,转到EvaluatingState进行处理,再转到ProbingState,进行isCapativePortal来继续去检测network

另外会在 1s 后继续校验,后续间隔时间会翻倍,即 1s-2s-4s, 上限是 600s,即 2^9-2^10,即最大间隔是 512s-600s,
无网络的network的log:

校验不成功会上报不成功
然后一样的流程会将validation failed上传到ConnectivityService中的EVENT_NETWORK_TESTED进行处理

插卡后执行下 adb shell dumpsys network_stack | grep "Validation logs"