即使沒有其他事情發生,這個系統過程似乎使用了穩定的1-2%的CPU。在一天的過程中,即使設備沒有用於任何設備,也會消耗大量的電池電量。我無法將它與任何其他應用程序關聯起來,因爲即使它們在幾個小時內每次只使用了幾秒鐘的CPU時間,此過程也會使用分鐘。什麼是com.google.android.gms.persistent,它爲什麼總是使用CPU?
它似乎仍然運行,即使我:除了同步的最最低限度
- 關閉WiFi
- 關閉藍牙
- 關閉定位服務
- 關閉所有設備(例如, GMail)
我寫了一個小測試應用程序,每隔10ms監測一次/proc/<pid>/stat
並寫入logcat a ny時間com.google.android.gms.persistent
,希望它會寫一些東西給logcat本身,這將確定什麼應用程序或其他服務正在使用「持久」服務。我看不到太多,但這裏有幾件事情我確實看到:
InputReader: Reconfiguring input devices. changes=0x00000010
WifiService: acquireWifiLockLocked: WifiLock{NlpWifiLock type=2 [email protected]}
LocationFilter: Forcing stable location. Original location:Location[...
ConnectivityService: notifyType CAP_CHANGED for NetworkAgentInfo [WIFI() - 246]
每個線以上是在不同的時間,立即com.google.android.gms.persistent
但沒有前面(內10ms)的日誌信息檢測CPU使用率任何明確的表示它是否有關。不幸的是,上述報告中沒有一個報告的CPU時間超過了10毫秒,所以 - 即使表示正在使用「持久性」的準確表示僅佔正在使用的實際CPU時間的一小部分。
其他嘗試研究什麼使用這個過程提出了各種各樣的東西(如可穿戴設備),我沒有,也從未連接到我的設備。
什麼是使用這個過程?我直接尋找這些信息,或者通過其他方式,我可以推斷出這些信息與我通過logcat進行的嘗試類似。
更新:我一直在尋找來源(例如com.google.android.gms.persistent.java或類似的東西)https://android.googlesource.com沒有任何運氣。這不是公共源代碼的一部分嗎?真奇怪的是,甚至沒有任何文件,例如這裏:https://android.googlesource.com/platform/frameworks/base/+/33fca8e/docs/html/reference/com/google/android/gms
更新2:我禁用了設置 - >帳戶下的所有同步。這看起來似乎會降低CPU使用率,並且電池電量下降似乎已經下降到一定程度 - 除了週期性的com.google.android.gms.persistent似乎仍然需要一陣CPU。
我現在的工作理論是,它有一個鬧鐘,以大約60秒的時間間隔發射,無論它是否需要,並且該代碼正在檢查同步工作,並且如果不需要同步,它會放棄立即開始時間片並讓CPU正確地進入睡眠狀態。然而,我半途不敢相信會使用這樣一個可怕的設計,因爲每分鐘喚醒CPU都會使電池快速耗盡即使剛回到睡眠狀態,爲什麼要使用輪詢而不是中斷驅動的同步呢?
據我所知(由於無法找到它)com.google.android.gms.persistent的源代碼不是開源的或在任何地方都可以在線獲得。如果我錯了,我會接受作爲我的問題的答案,任何答案都會指向源代碼,因爲我可以瀏覽它併爲自己確定CPU使用率的原因。
這是Google Play服務的一部分。我假設Google Play服務的持久層。您是否嘗試通過設置 - >應用禁用Google Play遊戲應用? –
我並不確定具體使用了什麼'persistent',但'gms'是Play服務,它處理諸如位置,推送通知,分析等一大堆東西。任何使用Google Play服務的應用程序都會掛入到它。 – DeeV
@MichaelKrause反正我不使用Google Play遊戲,所以我試過禁用它,會在一兩個小時內看到有什麼影響。 – Michael