即使没有其他事情发生,这个系统过程似乎使用了稳定的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