Android11 有线网和wifi优先级设置

这篇具有很好参考价值的文章主要介绍了Android11 有线网和wifi优先级设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、优先级基本知识介绍

Android6.0之后系统中优先级设置都是根据Score分值来设置优先级,分值0-100,数值越高,越优先。

系统默认分值:

SIM卡网络  50
wifi网络   60
有线网络   70

手机网络设置都有自己的Factory设置类,都继承自NetworkFactory.java
wifi网络设置类:WifiNetworkFactory.java packages/modules/Wifi/service/java/com/android/server/wifi/WifiNetworkFactory.java
有线网络设置类:EthernetNetworkFactory.java frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetNetworkFactory.java

移动网络设置类:TelephonyNetworkFactory.java

frameworks\opt\telephony\src\java\com\android\internal\telephony\dataconnection\TelephonyNetworkFactory.java

NetworkFactory的子类都有NETWORK_SCORE常量,表示该网络的分值。

二、有线网络优先级设置

1、在Android9.0设置有线网络优先级直接修改EthernetNetworkFactory.java的 NETWORK_SCORE 值就行

private final static int NETWORK_SCORE = 55; //change score from 70

但是我Android11 的代码修改后发现并不能生效,还是有线网优先。
研究了一下EthernetNetworkFactory.java和ConnectivityService.java发现里面的逻辑有很大的修改。

2、在Android11 修改有线网络优先级

找到EthernetNetworkFactory.java的getNetworkScore()方法,这里面返回的score才是有线网的有效分值;

这个getNetworkScore()方法是在Android11 新增的。

在该方法返回NETWORK_SCORE值即可。里面很多判断是没啥用的。

如果要wifi优先级高于有线,一定要设置有线网络的分值比wifi小,在后期测试过程中发现在某些情况,wifi的分值会变成20,把有线网络分值设置成15才生效。

adb是可以进行分值查看的,文章最后有描述。

三、网络优先级简单刨析

参考:

Framework中的连接管理机制: https://blog.csdn.net/u010961631/article/details/48629601

网络连接评分机制之NetworkFactory: https://blog.csdn.net/u010961631/article/details/48971431

网络连接评分机制之NetworkAgent: https://blog.csdn.net/u010961631/article/details/48971651

Android网络优先级及更改: https://blog.csdn.net/u013686019/article/details/51447129/

网上的代码都比较旧了,只能做思路参考,里面有些方法不一样了。

1、网络切换的主要逻辑都是在 ConnectivityService.java里面

ConnectivityService.java和WMS、AMS一样,都是在System_server里面启动的;

ConnectivityService.java里面会对NetworkFactory的网络连接子类进行保存和管理。

Android11 ConnectivityService
新增了NetworkProviderInfo是一个内部类,但是以前的NetworkAgentInfo还保留了;

2、优先级评分逻辑主要在evalRequest方法

NetworkFactory.java的evalRequest方法是评分的主要判断逻辑


    private void evalRequest(NetworkRequestInfo n) {

        if (VDBG) {
            log("evalRequest");
            log(" n.requests = " + n.requested);
            log(" n.score = " + n.score);
            log(" mScore = " + mScore);
            log(" request.providerId = " + n.providerId);
            log(" mProvider.id = " + mProvider.getProviderId());
        }

        if (shouldNeedNetworkFor(n)) { //通过一些属性值判断是否需要请求网络
            if (DBG) log("  needNetworkFor");
            needNetworkFor(n.request, n.score);
            n.requested = true;
        } else if (shouldReleaseNetworkFor(n)) { //通过一些属性值判断是否需要释放网络
            if (DBG) log("  releaseNetworkFor");
            releaseNetworkFor(n.request);
            n.requested = false;
        } else {
            if (DBG) log("  done");
        }
    }

具体情况和释放网络的操作都是在子类中进行实现的。

真正要使用的网络一定要经过needNetworkFor这个方法。

可以多添加有一些日志确定是否执行某个方法。

3、要理解这个网络连接的具体流程要清楚几个东西

(1)NetworkFactory.java

相关的子类:WifiNetworkFactory、EthernetNetworkFactory
内部类:NetworkRequestInfo

(2)ConnectivityService.java

内部类:NetworkProviderInfo

####(3)Handler

Messenger对象的理解,不是Message对象哦

因为NetworkFactory是继承自Handler,

并且很多消息的发送接收都是通过Messenger对象进行的;

(4)其他

NetworkRequest 网络请求对象

NetworkAgent 网络代理对象,在EthernetNetworkFactory中有创建

NetworkAgentInfo 网络代理封装对象,在ConnectivityService中创建

消息的传送都是通过Messenger,ConnectivityService–》NetworkAgentInfo–》NetworkAgent–》具体的Factory

Network 网络对象,被包含在网络代理对象里面

EthernetNetworkFactory.NetworkInterfaceState.start()–>new NetworkAgent
Vpn.agentConnect()–>new NetworkAgent

NetworkAgent.register()–>

ConnectivityManager.registerNetworkAgent–>

ConnectivityService.registerNetworkAgent–>new NetworkAgentInfo

如果要查看当前网络对应的Score,
可以通过adb shell dumpsys connectivity,里面的Current Networks有很多相关的数据信息,前提是要先连接上对应的网络。

adb 查看分析网络情况详解:
https://blog.csdn.net/wenzhi20102321/article/details/122161589文章来源地址https://www.toymoban.com/news/detail-709204.html

到了这里,关于Android11 有线网和wifi优先级设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows server 2016 安装有线网卡驱动

    https://www.intel.cn/content/www/cn/zh/download/18737/26092/intel-network-adapter-driver-for-windows-server-2016.html? 有改不好的,我下面有已经改好的,可以直接下载使用 。 https://download.csdn.net/download/qq_45935297/86016065 bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS bcdedit -set TESTSIGNING ON 执行完毕后重启。 更新驱

    2024年02月04日
    浏览(51)
  • 将电脑的无线网通过有线分享给其他设备

    工具:连接无线网的笔记本电脑一台、网线一根、能插网线的待连接设备一台 步骤 1、首先,将笔记本电脑连接至可用的无线网络。 2、打开控制面板,查看方式选择类别,然后点击网络和Internet。 3、点击网络和共享中心 4、点击更改适配器设置  5、网线两端连接电脑和待连

    2024年02月11日
    浏览(45)
  • ThinkPad中有线网无法使用Access Connections创建共享热点的解决方法图解

    使用Think自带的ThinkVantage Access Connections中的mobilehotspot功能创建热点,使用无线创建热点正常,在mobilehotspot模块中可以正常点击开始进行创建,但要使用有线网络接入进行共享创建热点,发现点击mobilehotspot模块中的开始按钮,呈现灰色不可选状态,导致无法创建热点。 解决方

    2024年02月06日
    浏览(51)
  • Android 音频策略(音频优先级,音频输入输入,声音优先级)

    音频设备(/system/core/include/system/audio.h) 注意: 这些设备比较常用的就是HDMI,扬声器,3.5mm圆孔耳机,USB耳机,还有蓝牙耳机。本文也主要针对这些设备的输入和输出策略做出说明。 Android音频策略主要是在 frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp中,接下来我们看一

    2024年02月04日
    浏览(62)
  • Win11 下更改多张网卡的网络优先级/路由优先权(Change Network metric for multiple network on Win11)

    通过更改network metric可以控制 优先 使用有线/无线网络。 1. 打开设置中的网络设置,并找到 高级网络设置 : 2.  在 高级网络设置 中点击 更多网络适配器选项 ,这时会弹出一个 新窗口 :  3.在新的窗口中选择要更改的网络适配器, 右键 点击并打开 属性 : 4. 在属性界面找

    2024年02月12日
    浏览(54)
  • android:persistent和android:priority的区别,对进程优先级有什么影响?

    前言:写的apk因为系统busy给我kill了,(adj 900): kill all background,在AndroidManifest.xml添加android:persistent=\\\"true\\\"后,被甲方要求不能这样做,还是得从adj改,把 priority改成1000 android:persistent和android:priority是两个不同的属性,它们分别用于不同的目的。 android:persistent:用于设置应用组

    2024年01月25日
    浏览(38)
  • Android进程类型及优先级(前台进程/可见进程/服务进程/缓存进程/空进程)

    Android 进程优先级 :前台进程 可见进程 服务进程 缓存进程 空进程 ; 关键优先级进程 : 活动进程 ; 高优先级进程 : 可见进程 , 服务进程 ; 低优先级进程 : 后台进程 , 空进程 ; Android 系统中会尽量保证优先级高的进程的存在时间尽可能长 ;如果资源不足 ( 这里的资源最主要的是内

    2024年04月12日
    浏览(37)
  • c语言[]优先级大于*优先级

    本博文源于笔者正在学习的c语言[]优先级大于*优先级.在定义二维数组时,a+1与[]号结合后,谁的优先级更高,是本博文探讨的话题 想要看看*与[]谁的优先级更高 通过代码发现[]优先级比*号要高(a+1)[1]等价于a+2再取*号就是9了,在第二个pirintf代码中,等价于a[1][1] =6,第三个

    2024年01月20日
    浏览(60)
  • NVIC 简介、抢占优先级和响应优先级

    NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。 如果医院只有医生的话,当看病的人很多时,医生就得安排一下先看谁,后看谁,如果有紧急的病人,那还得让紧急的病人最先来,这个安排先后次序的任务很繁琐,

    2024年02月05日
    浏览(55)
  • 中断处理优先级和中断响应优先级的区别

      中断响应优先级是针对同时到达的中断请求先处理谁的规定。比如A、B同时向CPU发出中断请求,而中断响应优先级是AB,那么CPU就会先处理A,再处理B。   如下图:   中断处理优先级是解决中断嵌套情况下优先处理谁的问题。比如A、B两个中断的中断处理优先级是BA,

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包