同样的APP为何在Android 8以后网络感觉变卡?

京东云开发者
• 阅读 206

前言



在无线网络技术不断发展的今天,Wi-Fi已经成为了我们日常生活中不可或缺的一部分。无论是家庭娱乐、办公还是在线游戏,Wi-Fi都在提供着便捷的互联网接入服务。然而,在安卓8.1后,为了进一步延长安卓设备的待机时间。原生安卓(AOSP等)默认开启了全局省电(低功耗模式),该模式下WIFI芯片通过牺牲网络系统来省电,同时降限制CPU的工作频率。

但是在某些特定的应用场景中,如在线游戏、实时视频会议等,低延迟比高带宽更为重要。为此,Android系统提供了一种名为WIFI_MODE_FULL_LOW_LATENCY的Wi-Fi模式,以及强制激活高性能模式WIFI_MODE_FULL_HIGH_PERF。





一、什么是WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY?

WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY是Android系统中Wi-Fi的一种模式,它允许设备在连接Wi-Fi网络时获得更高的性能。在这种模式下,设备会尝试使用更高的无线频率和更多的无线通道,从而提高数据传输速率和降低延迟。





二、为什么要开启WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY?

1.提高数据传输速率

在WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY模式下,设备可以使用更高功耗来处理无线数据,从而提高数据传输速率。这对于需要高速无线网络的场景,如高清视频流媒体、大型文件传输等,具有很大的优势。

2.降低延迟

在网络游戏,VOIP中,延迟对于用户的使用体验至关重要。WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY模式可以降低无线网络的延迟,使玩家在游戏中获得更流畅的操作体验。此外,对于实时音视频通话等场景,降低延迟也能提高通信质量。

3.提高网络稳定性

WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY模式可以提高无线网络的稳定性,减少因信号干扰等原因导致的网络中断。这对于需要长时间稳定连接的场景,如远程办公、在线教育等,具有很大的帮助。

4.充分发挥设备性能

许多高端智能设备都支持高速无线网络,但默认的Wi-Fi模式可能无法充分发挥其性能。开启WIFI_MODE_FULL_HIGH_PERF/WIFI_MODE_FULL_LOW_LATENCY模式后,设备可以充分利用其硬件资源,提高无线网络性能。





三、使用WIFI_MODE_FULL_HIGH_PERF 还是 WIFI_MODE_FULL_LOW_LATENCY?

虽然WIFI_MODE_FULL_HIGH_PERF 和 WIFI_MODE_FULL_LOW_LATENCY 使用效果基本一致,但是有几个小的不同点需要注意。

1.WIFI_MODE_FULL_HIGH_PERF 在 API level 12中被引入, 但在API level 34中被标记为废弃,在以后得API版本中可能被移除。面对以后构件的代码中可能失效。

WIFI_MODE_FULL_LOW_LATENCY 在API level 29中引入,目前官方建议使用WIFI_MODE_FULL_LOW_LATENCY 替代WIFI_MODE_FULL_HIGH_PERF



2.WIFI_MODE_FULL_LOW_LATENCY 仅当获取应用程序在前台运行时,锁定才处于活动状态。但是WIFI_MODE_FULL_HIGH_PERF 启用后应用在后台状态依然可以保持无线高性能模式运行。

四、代码测试

1.在AndroidManifest.xml 文件中添加所需权限



<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>

2.在任意一个可以获取context的class内激活高性能模式




    import android.net.wifi.WifiManager;
    import android.net.wifi.WifiManager.WifiLock;
    import android.os.PowerManager;
    import android.os.PowerManager.WakeLock; 


    private final String TAG = "LockManager@" + hashCode();


    public void onStart() {
        Context appContext = getApplicationContext();
        WifiManager wifiManager = (WifiManager) appContext.getSystemService(Context.WIFI_SERVICE);  //激活WIFI性能锁定
        wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);   
       // wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_LOW_LATENCY, TAG);

        wifiLock.acquire();
        PowerManager powerManager = (PowerManager) appContext.getSystemService(Context.POWER_SERVICE); //激活CPU性能锁定
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        wakeLock.acquire();

        super.onStart();
    }



    //释放性能锁定
    public void onStop() {
        super.onStop();

        if (wakeLock != null) {
            wakeLock.release();
            wakeLock = null;
        }
        if (wifiLock != null) {
            wifiLock.release();
            wifiLock = null;
        }
    }





五、测试结果

在为打开测试app时ping目标机器 20个包平均延迟为185ms,最大值为555ms。 在长期测试中无线漫游丢包率为3%



同样的APP为何在Android 8以后网络感觉变卡?



在通过测试app激活高性能模式后 同样的20个包平均延迟为6.7ms,最大值为23ms. 在长期测试中无线漫游丢包率为0%



同样的APP为何在Android 8以后网络感觉变卡?





六、总结

目前市面上的安卓版本分裂较为严重,无法做到ios一样强统一。针对无线性能问题,国内的几大主流厂家均在自己的UI界面中有优化。但是原生安卓,AOSP等等小厂家,物联网设备,物流设备以及系统优化功底不到位的设备生产商均未针对性优化该问题。

目前市面上Bilibili,各类游戏APP,语音会议等等对用户体验,无线要求较高的软件均启用了该API,来提高网络响应速度。

如果用户对无线网络要求延迟在30ms内 丢包率小于1%的使用场景 ,建议APP手动激活高性能模式。保证用户体验的一致性

作者:京东零售 罗旅帆

来源:京东云开发者社区

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
3年前
网站打包成Apk的正确姿势
大家好,我是IT共享者,人称皮皮。前言安卓手机想必很多人都在使用,我们手机上安卓的每一款应用的后缀名都是以“.apk”结尾,那么这些Apk是如何做出来的了,就目前小编知道的来讲,有这以下几种:1.使用三方软件转换生成,比如E4a,火山,蓝鸟,Iapp2.使用原生的Android代码,如Androidstudio目前职业玩家是第二种,一般玩家大都聚集在第
Stella981 Stella981
3年前
Android 8.1实现静默升级踩过的坑
最近在做Android8.1的系统自动升级app的功能,遇到不少坑,特在这里记录下来。首先,我这个自己做的安卓主板,并且安卓系统是经过root过的。如果你的系统没有root,请移步,这篇文章不适合你!先说需求,我的app会自动从服务器上下载最新版的apk安装包,然后自动安装,app监听了android.intent.action.PACKAGE
Stella981 Stella981
3年前
2020年下载bilibili 1080p视频的方法
需求:下载1080p视频。工具:安卓.b站app.安卓离线想下载的视频即可。默认保存路径/storage/emulated/0/Android/data/tv.danmaku.bili不过下载后的视频是视频音频分离的。 audio.m4s video.m4s 改对应后缀即可播放。但是我需要单个视频文件!所以需要ffmpeg来合成一下了
可莉 可莉
3年前
2020年下载bilibili 1080p视频的方法
需求:下载1080p视频。工具:安卓.b站app.安卓离线想下载的视频即可。默认保存路径/storage/emulated/0/Android/data/tv.danmaku.bili不过下载后的视频是视频音频分离的。 audio.m4s video.m4s 改对应后缀即可播放。但是我需要单个视频文件!所以需要ffmpeg来合成一下了
Stella981 Stella981
3年前
Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名
安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息。 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了。 本文为大家介绍三种方式来检查Internet连接状态。1、使用Linux系统pingip的命令方式检查设备的Internet连接状态。 2
子桓 子桓
1年前
安卓文件传输不到mac电脑,怎么解决?
安卓文件传输不到mac电脑,怎么解决?别急,赶快入手MacDroidformac中文激活版,专业安卓设备文件传输助手,一款用于Mac和安卓设备之间传输文件的工具。它可以帮助用户在Mac电脑和安卓设备之间共享文件,包括音乐、照片、视频、文档等。以下是MacD
铁扇公主 铁扇公主
1年前
MacDroid for mac(安卓设备文件传输助手) v1.6.1中文
MacDroid一款Mac平台上的安卓传输助手,它可以帮助用户在Mac电脑和安卓设备之间传输文件和文件夹。MacDroid支持通过USB连接或局域网连接进行传输。MacDroid具有多种功能,包括文件和文件夹的双向传输、安卓设备的远程文件管理、安卓设备的存
京东云开发者 京东云开发者
4个月前
动态化-鸿蒙跨端方案介绍
一、背景👉华为在2023.9.25官方发布会上宣布,新的鸿蒙系统将不再兼容安卓应用,这意味着,包括京东金融APP在内的所有安卓应用,在新的鸿蒙系统上将无法运行,需要重新开发专门适用于新鸿蒙系统的专版APP。二、原生适配方案原生适配方案就是将京东金融APP