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

前言



在无线网络技术不断发展的今天,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 文件中添加所需权限



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

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



1 2 import android.net.wifi.WifiManager; 3 import android.net.wifi.WifiManager.WifiLock; 4 import android.os.PowerManager; 5 import android.os.PowerManager.WakeLock; 6 7 8 private final String TAG = "LockManager@" + hashCode(); 9 10 11 public void onStart() { 12 Context appContext = getApplicationContext(); 13 WifiManager wifiManager = (WifiManager) appContext.getSystemService(Context.WIFI_SERVICE); //激活WIFI性能锁定 14 wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG); 15 // wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_LOW_LATENCY, TAG); 16 17 wifiLock.acquire(); 18 PowerManager powerManager = (PowerManager) appContext.getSystemService(Context.POWER_SERVICE); //激活CPU性能锁定 19 wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 20 wakeLock.acquire(); 21 22 super.onStart(); 23 } 24 25 26 27 //释放性能锁定 28 public void onStop() { 29 super.onStop(); 30 31 if (wakeLock != null) { 32 wakeLock.release(); 33 wakeLock = null; 34 } 35 if (wifiLock != null) { 36 wifiLock.release(); 37 wifiLock = null; 38 } 39 } 40





五、测试结果

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





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







六、总结

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

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

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

作者:京东零售 罗旅帆

来源:京东云开发者社区

点赞
收藏

评论区

加载中...

相关推荐

Android 8.1实现静默升级踩过的坑

最近在做Android8.1的系统自动升级app的功能,遇到不少坑,特在这里记录下来。首先,我这个自己做的安卓主板,并且安卓系统是经过root过的。如果你的系统没有root,请移步,这篇文章不适合你!先说需求,我的app会自动从服务器上下载最新版的apk安装包,然后自动安装,app监听了android.intent.action.PACKAGE

2020年下载bilibili 1080p视频的方法

需求:下载1080p视频。工具:安卓.b站app.安卓离线想下载的视频即可。默认保存路径/storage/emulated/0/Android/data/tv.danmaku.bili不过下载后的视频是视频音频分离的。 audio.m4s video.m4s 改对应后缀即可播放。但是我需要单个视频文件!所以需要ffmpeg来合成一下了

2020年下载bilibili 1080p视频的方法

需求:下载1080p视频。工具:安卓.b站app.安卓离线想下载的视频即可。默认保存路径/storage/emulated/0/Android/data/tv.danmaku.bili不过下载后的视频是视频音频分离的。 audio.m4s video.m4s 改对应后缀即可播放。但是我需要单个视频文件!所以需要ffmpeg来合成一下了

Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名

安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息。 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了。 本文为大家介绍三种方式来检查Internet连接状态。1、使用Linux系统pingip的命令方式检查设备的Internet连接状态。 2

安卓手机+Mac无缝连接!MacDroid Pro 让你传文件像AirDrop一样简单

MacDroidPro是一款专为Mac用户设计的安卓设备管理工具,让Mac和安卓设备之间的文件传输、管理变得简单高效。✔无线/有线双模式连接支持USB连接或WiFi无线传输,灵活选择。兼容M1/M2Mac,速度更快更稳定。✔直观的文件管理直接访问安卓手机的

安卓文件传输不到mac电脑,怎么解决?

安卓文件传输不到mac电脑,怎么解决?别急,赶快入手MacDroidformac中文激活版,专业安卓设备文件传输助手,一款用于Mac和安卓设备之间传输文件的工具。它可以帮助用户在Mac电脑和安卓设备之间共享文件,包括音乐、照片、视频、文档等。以下是MacD