成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android設備WiFi掃描策略:在亮屏與滅屏狀態(tài)下,系統(tǒng)如何高效管理網(wǎng)絡連接

移動開發(fā) Android
為了優(yōu)化能耗和用戶體驗,Android系統(tǒng)可能會采用一些節(jié)能策略來限制WiFi掃描的頻率和持續(xù)時間。例如,在設備處于滅屏狀態(tài)時,系統(tǒng)可能會減少或暫停WiFi掃描,以延長電池壽命。

WiFi掃描場景

WiFi掃描場景根據(jù)設備的屏幕狀態(tài)、用戶當前的活動以及網(wǎng)絡環(huán)境的不同,而采用了不同的掃描策略。

1.「亮屏且在WiFi設置界面」:

當用戶在亮屏狀態(tài)下進入WiFi設置界面時,設備會進行固定掃描,掃描時間通常為10秒。這種掃描是為了快速獲取當前可用的WiFi網(wǎng)絡列表,供用戶選擇連接。

2.「亮屏且不在WiFi設置界面」:

在這種情況下,Android設備會采用二進制指數(shù)退避掃描策略。掃描間隔會根據(jù)一定的算法逐漸增長,最小間隔為20秒,最大間隔可能達到160秒。這種策略有助于平衡設備的能耗和WiFi掃描的效率。

3.「滅屏且有保存的網(wǎng)絡」:如果設備處于滅屏狀態(tài),但之前有保存過WiFi網(wǎng)絡,那么設備會根據(jù)當前的網(wǎng)絡連接狀態(tài)進行掃描。如果已連接到某個網(wǎng)絡,則不會進行掃描;否則,設備會進行PNO(Preferred Network Offload)掃描,即只掃描已保存的網(wǎng)絡。這種掃描的最小間隔為20秒,最大間隔為60秒。

4.無保存網(wǎng)絡」:

在沒有保存任何WiFi網(wǎng)絡的情況下,設備會進行固定掃描,掃描間隔通常為5分鐘。這種掃描的目的是為了通知用戶周圍存在可用的開放網(wǎng)絡。

還有一些特殊場景下的WiFi掃描,例如:

「位置變化」:當用戶攜帶設備移動到新的位置時,設備可能會自動觸發(fā)WiFi掃描,以尋找并連接到新的可用網(wǎng)絡。

「應用請求」:某些應用可能需要在后臺請求WiFi掃描,以獲取周圍的網(wǎng)絡信息或進行其他相關操作。在這種情況下,Android系統(tǒng)會根據(jù)應用的權限和策略來決定是否允許掃描。

亮屏且在WiFi設置界面

當設備處于亮屏狀態(tài)且正在WiFi設置界面時,WiFi掃描的行為會更為活躍和精確。這是為了提供一個實時、準確的可用WiFi網(wǎng)絡列表,以便能夠方便地選擇并連接到合適的網(wǎng)絡。

  1. 「實時掃描」:當打開WiFi設置界面時,系統(tǒng)會立即啟動一次WiFi掃描。這次掃描是實時的,會立即搜索并列出當前可用的WiFi網(wǎng)絡。
  2. 「持續(xù)刷新」:一旦掃描開始,系統(tǒng)會持續(xù)刷新WiFi網(wǎng)絡列表,以確保列出的網(wǎng)絡是最新的。通過定期重新掃描或監(jiān)聽網(wǎng)絡變化事件來實現(xiàn)的。
  3. 「網(wǎng)絡信號強度顯示」:在WiFi設置界面,除了列出網(wǎng)絡名稱(SSID)外,系統(tǒng)還會顯示每個網(wǎng)絡的信號強度。這有助于判斷哪個網(wǎng)絡的信號更好,從而做出更明智的連接選擇。
  4. 「安全性標識」:對于每個列出的WiFi網(wǎng)絡,系統(tǒng)還會顯示其安全性信息(如開放網(wǎng)絡、WPA2-PSK等)。這有助于了解網(wǎng)絡的安全性,并決定是否信任并連接到該網(wǎng)絡。
  5. 「用戶交互」:在WiFi設置界面,可以進行多種操作,如點擊某個網(wǎng)絡進行連接、輸入密碼、忘記網(wǎng)絡等。這些操作會觸發(fā)相應的系統(tǒng)響應,如啟動連接過程、驗證密碼等。

亮屏且在WiFi設置界面時設備會進行固定掃描,掃描時間通常為10秒。這種掃描是為了快速獲取當前可用的WiFi網(wǎng)絡列表,供用戶選擇連接。WIFI_RESCAN_INTERVAL_MS為 10 * 1000(10秒)。

//WifiTracker.java
public void handleMessage(Message message) {
    if (message.what != MSG_SCAN) return;
    if (mWifiManager.startScan()) {
        mRetry = 0;
    } else if (++mRetry >= 3) {
        mRetry = 0;
        if (mContext != null) {
            Toast.makeText(mContext, R.string.wifi_fail_to_scan, Toast.LENGTH_LONG).show();
        }
        return;
    }
    sendEmptyMessageDelayed(MSG_SCAN, WIFI_RESCAN_INTERVAL_MS);
}

亮屏且不在WiFi設置界面

當設備的屏幕處于亮屏狀態(tài),但并不在WiFi設置界面時,WiFi掃描的行為會有所不同。在這種情況下,系統(tǒng)會根據(jù)一系列策略和算法來管理WiFi掃描,以平衡設備的能耗、性能和用戶體驗。

  1. 「減少掃描頻率」:與在WiFi設置界面時相比,當不在該界面時,系統(tǒng)通常會減少WiFi掃描的頻率。這是為了降低設備的能耗,并避免在不必要的情況下進行過多的網(wǎng)絡搜索。
  2. 「二進制指數(shù)退避掃描」:為了進一步優(yōu)化掃描行為,Android系統(tǒng)可能會采用二進制指數(shù)退避掃描策略。每次掃描之間的間隔會逐漸增加,基于一個退避算法。初始間隔可能較短,但隨著連續(xù)掃描次數(shù)的增加,間隔會逐漸延長。這種策略有助于減少掃描的頻繁性,同時能夠保持對可用網(wǎng)絡的檢測能力。
  3. 「應用層請求」:盡管系統(tǒng)減少了自動掃描的頻率,但應用程序仍然可以在后臺請求WiFi掃描。例如,某些應用可能需要獲取周圍的網(wǎng)絡信息以執(zhí)行其功能。在這種情況下,系統(tǒng)會評估應用的權限和請求,并根據(jù)需要執(zhí)行掃描。
  4. 「位置和網(wǎng)絡變化觸發(fā)」:如果設備的位置發(fā)生變化或檢測到網(wǎng)絡狀態(tài)發(fā)生變化(例如,從移動數(shù)據(jù)切換到WiFi),系統(tǒng)可能會自動觸發(fā)一次WiFi掃描。確保設備能夠及時發(fā)現(xiàn)并連接到新的可用網(wǎng)絡。
  5. 「用戶手動觸發(fā)」:盡管系統(tǒng)減少了自動掃描,仍然可以手動觸發(fā)WiFi掃描。例如,可以通過下拉通知欄并點擊“WiFi”圖標來重新掃描可用網(wǎng)絡。

亮屏且不在WiFi設置界面時掃描間隔會根據(jù)一定的算法逐漸增長,最小間隔為20秒,最大間隔可能達到160秒。

startConnectivityScan --> startPeriodicScan --> startPeriodicSingleScan

//WifiConnectivityManager.java

//掃描間隔定義
// Periodic scan interval in milli-seconds. This is the scan
// performed when screen is on.
public static final int PERIODIC_SCAN_INTERVAL_MS = 20 * 1000; // 20 seconds
// When screen is on and WiFi traffic is heavy, exponential backoff
// connectivity scans are scheduled. This constant defines the maximum
// scan interval in this scenario.
@VisibleForTesting
public static final int MAX_PERIODIC_SCAN_INTERVAL_MS = 160 * 1000; // 160 seconds

private void startConnectivityScan(boolean scanImmediately) {
        
    // Always stop outstanding connecivity scan if there is any
    stopConnectivityScan();
 
    if (mWifiState != WIFI_STATE_CONNECTED && mWifiState != WIFI_STATE_DISCONNECTED) {
        return;
    }
 
    if (mScreenOn) {
        startPeriodicScan(scanImmediately);
    } else {
        if (mWifiState == WIFI_STATE_DISCONNECTED && !mPnoScanStarted) {
            startDisconnectedPnoScan();
        }
    }
}

private void startPeriodicScan(boolean scanImmediately) {
    mPnoScanListener.resetLowRssiNetworkRetryDelay();
 
    if (scanImmediately) {
        resetLastPeriodicSingleScanTimeStamp();
    }
    mPeriodicSingleScanInterval = PERIODIC_SCAN_INTERVAL_MS;
    startPeriodicSingleScan();
}

// Start a single scan and set up the interval for next single scan.
private void startPeriodicSingleScan() {
    long currentTimeStamp = mClock.getElapsedSinceBootMillis();
 
    if (mLastPeriodicSingleScanTimeStamp != RESET_TIME_STAMP) {
        long msSinceLastScan = currentTimeStamp - mLastPeriodicSingleScanTimeStamp;
        if (msSinceLastScan < PERIODIC_SCAN_INTERVAL_MS) {
            localLog("Last periodic single scan started " + msSinceLastScan + "ms ago, defer this new scan request.");
            schedulePeriodicScanTimer(PERIODIC_SCAN_INTERVAL_MS - (int) msSinceLastScan);
            return;
        }

        if (isScanNeeded) {
            mLastPeriodicSingleScanTimeStamp = currentTimeStamp;
            startSingleScan(isFullBandScan, WIFI_WORK_SOURCE);
            schedulePeriodicScanTimer(mPeriodicSingleScanInterval);
 
            // Set up the next scan interval in an exponential backoff fashion.
            mPeriodicSingleScanInterval *= 2;
            if (mPeriodicSingleScanInterval >  MAX_PERIODIC_SCAN_INTERVAL_MS) {
                mPeriodicSingleScanInterval = MAX_PERIODIC_SCAN_INTERVAL_MS;
            }
        } else {
            // Since we already skipped this scan, keep the same scan interval for next scan.
            schedulePeriodicScanTimer(mPeriodicSingleScanInterval);
        }
    }
}

滅屏且有保存的網(wǎng)絡

當設備處于滅屏狀態(tài),存在已保存的WiFi網(wǎng)絡時,WiFi掃描行為會呈現(xiàn)出一種特定的模式。系統(tǒng)會根據(jù)之前的連接記錄和網(wǎng)絡狀態(tài),以高效且節(jié)能的方式管理WiFi連接。

  1. 「已連接網(wǎng)絡的持續(xù)監(jiān)控」:如果設備當前已連接到某個已保存的WiFi網(wǎng)絡,系統(tǒng)會持續(xù)監(jiān)控該網(wǎng)絡的連接狀態(tài)。只要連接穩(wěn)定且信號良好,設備通常不會進行額外的WiFi掃描。
  2. 「未連接網(wǎng)絡的PNO掃描」:如果設備未連接到任何已保存的WiFi網(wǎng)絡,會執(zhí)行PNO(Preferred Network Offload)掃描。掃描僅針對已保存的網(wǎng)絡列表進行,而不是對整個可用網(wǎng)絡進行掃描。有助于節(jié)省設備能耗,同時確保能夠快速連接到已知的、可信的網(wǎng)絡。
  3. 「掃描間隔優(yōu)化」:為了平衡掃描的準確性和設備的能耗,PNO掃描的間隔會經(jīng)過優(yōu)化。通常情況下,最小掃描間隔可能設置為20秒,而最大間隔可能根據(jù)網(wǎng)絡狀況和設備策略進行調整,通常不會超過幾分鐘。確保了設備在需要時能夠及時發(fā)現(xiàn)并連接到已保存的網(wǎng)絡,同時不會在不需要時過度消耗電池電量。
  4. 「用戶位置和網(wǎng)絡變化的響應」:如果在滅屏狀態(tài)下移動到了新的位置,或者網(wǎng)絡狀態(tài)發(fā)生了變化(例如,其他已保存的網(wǎng)絡變得可用),系統(tǒng)可能會根據(jù)這些變化調整掃描策略。包括縮短掃描間隔或觸發(fā)額外的掃描,以確保設備能夠及時響應這些變化。
  5. 「系統(tǒng)通知和提醒」:當設備發(fā)現(xiàn)已保存的WiFi網(wǎng)絡變得可用時,可能會通過系統(tǒng)通知或提醒來告知用戶。用戶可以選擇手動連接到該網(wǎng)絡,或者設置設備在下次亮屏時自動連接。

滅屏且有保存的網(wǎng)絡,最小間隔min=20s,最大間隔max=20s*3=60s,不同Android版本可能存在差異。

無保存網(wǎng)絡

當設備處于無保存網(wǎng)絡的狀態(tài)時,WiFi掃描行為會呈現(xiàn)出一種特定的模式。在這種情況下,設備沒有預先保存的WiFi網(wǎng)絡信息,需要通過掃描來尋找可用的網(wǎng)絡。

  1. 「定期掃描」:由于沒有保存的網(wǎng)絡信息,設備會定期進行WiFi掃描,以搜索并發(fā)現(xiàn)可用的網(wǎng)絡。掃描通常是在設備處于亮屏狀態(tài)時進行的,掃描的頻率可能會受到系統(tǒng)策略和設備設置的影響。
  2. 「掃描間隔」:在無保存網(wǎng)絡的情況下,掃描間隔可能會相對較長,以減少設備的能耗。具體的掃描間隔因設備和系統(tǒng)版本的不同而有所差異,通常會設置為幾分鐘或更長的時間。
  3. 「用戶交互觸發(fā)」:除了定期掃描外,也可以通過一些交互操作來觸發(fā)WiFi掃描。例如,可以在設置菜單中手動打開WiFi開關,或者通過下拉通知欄并點擊WiFi圖標來觸發(fā)掃描。
  4. 「網(wǎng)絡選擇提示」:當設備發(fā)現(xiàn)可用的WiFi網(wǎng)絡時,系統(tǒng)通常會顯示一個通知或提示,告知有新的網(wǎng)絡可用??梢渣c擊通知來查看網(wǎng)絡列表,并選擇要連接的網(wǎng)絡。
  5. 「安全性與信號強度考慮」:在選擇要連接的網(wǎng)絡時,通常會考慮網(wǎng)絡的安全性和信號強度。系統(tǒng)會顯示每個網(wǎng)絡的安全性信息(如開放網(wǎng)絡、WPA2-PSK等)以及信號強度指示,幫助用戶做出更明智的連接決策。
//WifiStateMachine.java
class DisconnectedState extends State {
    @Override
    public void enter() {
        Log.i(TAG, "disconnectedstate enter");
        // We dont scan frequently if this is a temporary disconnect
        // due to p2p
        if (mTemporarilyDisconnectWifi) {
            p2pSendMessage(WifiP2pServiceImpl.DISCONNECT_WIFI_RESPONSE);
            return;
        }
        /** clear the roaming state, if we were roaming, we failed */
        mIsAutoRoaming = false;
 
        mWifiConnectivityManager.handleConnectionStateChanged(
                WifiConnectivityManager.WIFI_STATE_DISCONNECTED);
 
        /**
         * If we have no networks saved, the supplicant stops doing the periodic scan.
         * The scans are useful to notify the user of the presence of an open network.
         * Note that these are not wake up scans.
         */
        if (mNoNetworksPeriodicScan != 0 && !mP2pConnected.get()
                && mWifiConfigManager.getSavedNetworks().size() == 0) {
            sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
                    ++mPeriodicScanToken, 0), mNoNetworksPeriodicScan);
        }
 
        mDisconnectedTimeStamp = mClock.getWallClockMillis();
        mWifiStateTracker.updateState(WifiStateTracker.DISCONNECTED);
    }
}

//其中掃描周期
mNoNetworksPeriodicScan = mContext.getResources().getInteger(R.integer.config_wifi_no_network_periodic_scan_interval);

frameworks/base/core/res/res/values/config.xmlmNoNetworksPeriodicScan在config.xml中注冊,周期為5分鐘

<!-- Integer indicating the framework no networks periodic scan interval in milliseconds. -->
<integer translatable="false" name="config_wifi_no_network_periodic_scan_interval">300000</integer>

為了優(yōu)化能耗和用戶體驗,Android系統(tǒng)可能會采用一些節(jié)能策略來限制WiFi掃描的頻率和持續(xù)時間。例如,在設備處于滅屏狀態(tài)時,系統(tǒng)可能會減少或暫停WiFi掃描,以延長電池壽命。而在設備電量較低或處于節(jié)能模式下時,系統(tǒng)也可能會限制WiFi掃描的行為。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2021-12-14 14:45:38

鴻蒙HarmonyOS應用

2021-09-13 15:14:01

鴻蒙HarmonyOS應用

2020-09-11 07:50:37

nmcli命令行網(wǎng)絡連接

2017-02-10 21:15:22

Windows 10Windows操作技巧

2010-12-23 14:42:54

網(wǎng)絡連接

2009-05-18 17:45:55

網(wǎng)絡連接網(wǎng)絡設備網(wǎng)康科技

2011-03-11 10:12:17

服務器網(wǎng)絡連接

2014-04-14 15:27:01

2011-09-08 18:28:03

windowsXP鎖定狀態(tài)

2012-04-09 11:11:40

2023-04-25 10:22:00

云計算網(wǎng)絡部署

2018-01-30 15:50:52

Android常亮方法

2009-09-09 15:24:06

2017-11-14 14:24:46

移動端DNS無線網(wǎng)絡

2009-07-27 09:18:51

網(wǎng)絡連接依賴

2011-07-21 10:15:31

2009-03-05 13:44:28

2017-12-04 14:00:41

Linux命令網(wǎng)絡連接

2009-07-27 13:32:37

2011-05-31 17:08:41

Android 網(wǎng)絡連接
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区视频 | 日韩午夜电影在线观看 | 亚洲国产区 | 黄网免费| 久草.com| 黄色网址在线免费观看 | 91久久国产综合久久 | 亚洲欧洲一区 | 国产999精品久久久久久绿帽 | 国产精品美女久久久免费 | 伊人性伊人情综合网 | 日日干日日操 | 看av网 | 欧美黄 片免费观看 | 韩日有码 | 国产成视频在线观看 | 美女久久久久久久 | 免费色网址 | 久久久夜色精品亚洲 | 亚洲高清视频一区二区 | 精品综合视频 | 美女久久久久久久 | 免费欧美 | 日本超碰| 免费成人毛片 | 亚洲国产二区 | 国产日韩精品视频 | 久久人爽爽人爽爽 | 午夜精品网站 | 久久久久久久久久久国产 | 国产欧美日韩久久久 | 九七午夜剧场福利写真 | 亚洲国产高清高潮精品美女 | 美女久久久久久久 | 国产精品揄拍一区二区久久国内亚洲精 | 久久99精品久久久久蜜桃tv | 国产一区二区在线视频 | 操操日| 国产一区91精品张津瑜 | 一区二区三区四区国产 | 欧美日韩三级在线观看 |