写点什么

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

  • 2024-05-23
    北京
  • 本文字数:2284 字

    阅读完需:约 7 分钟

前言


在无线网络技术不断发展的今天,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 激活高性能模式后 同样的 20 个包平均延迟为 6.7ms,最大值为 23ms. 在长期测试中无线漫游丢包率为 0%



六、总结


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


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


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


作者:京东零售 罗旅帆


来源:京东云开发者社区

发布于: 刚刚阅读数: 6
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
同样的APP为何在Android 8以后网络感觉变卡?_京东科技开发者_InfoQ写作社区