上不了网,原因很容易发现,重启路由之后没有分配到ip,故可断定dhcp出现了什么问题。
复现问题并抓取log,得知路由器重新活动之后dhcp确实又调了一次,想要获取网络,但是上层在阻塞等待底层dhcp完成的时候,超时返回了。
解决办法很简单,在它阻塞等待dhcp 返回的地方让它再调一次,dhcp应该就可以完成返回了。(在此说明,之所以会这样想是因为知道dhcp会耗费很长一段时间,就抱着测试的态度试了试。)
下面贴代码,log我就不贴了:android/frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java
修改之前的代码:
修改之后:
代码逻辑我也不加解释了,有兴趣的可以深入进去追踪阅读下它的调用逻辑。