同樣的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%





 

在通過測試app激活高性能模式後 同樣的20個包平均延遲爲6.7ms,最大值爲23ms. 在長期測試中無線漫遊丟包率爲0%





 



六、總結

目前市面上的安卓版本分裂較爲嚴重,無法做到ios一樣強統一。針對無線性能問題,國內的幾大主流廠家均在自己的UI界面中有優化。但是原生安卓,AOSP等等小廠家,物聯網設備,物流設備以及系統優化功底不到位的設備生產商均未針對性優化該問題。

目前市面上Bilibili,各類遊戲APP,語音會議等等對用戶體驗,無線要求較高的軟件均啓用了該API,來提高網絡響應速度。

如果用戶對無線網絡要求延遲在30ms內 丟包率小於1%的使用場景 ,建議APP手動激活高性能模式。保證用戶體驗的一致性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章