刘俊凯 发表于 2024-6-24 23:22:56

同样的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 文件中添加所需权限

<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%

https://img-blog.csdnimg.cn/img_convert/569245fef8e29129262f1faf2c207b5d.png

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

https://img-blog.csdnimg.cn/img_convert/a568d6d238c09e564db18ddc58d77489.png


六、总结
目前市面上的安卓版天职裂较为严峻,无法做到ios一样强统一。针对无线性能问题,国内的几大主流厂家均在自己的UI界面中有优化。但是原生安卓,AOSP等等小厂家,物联网设备,物流设备以及体系优化功底不到位的设备生产商均未针对性优化该问题。
目前市面上Bilibili,各类游戏APP,语音集会等等对用户体验,无线要求较高的软件均启用了该API,来提高网络响应速度。
假如用户对无线网络要求延迟在30ms内 丢包率小于1%的使用场景 ,建议APP手动激活高性能模式。包管用户体验的同等性
作者:京东零售 罗旅帆
来源:京东云开发者社区

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 同样的APP为何在Android 8以后网络感觉变卡?