什么是com.google.android.gms.persistent,为什么总是使用CPU?

Mic*_*ael 37 android android-6.0-marshmallow

即使没有其他任何事情发生,这个系统进程似乎使用稳定的1-2%的CPU.在一天的过程中,即使设备没有用于任何东西,也会耗尽大量的电池.我无法将其与任何其他应用程序相关联,因为即使他们在几个小时的过程中仅使用了几秒的CPU时间,此过程也会使用分钟.

即使我:它似乎仍然运行:

  • 关掉WiFi
  • 关闭蓝牙
  • 关闭位置服务
  • 关闭除了最简单的同步之外的所有内容(例如GMail)

我写了一个小测试应用程序,/proc/<pid>/stat每隔10毫秒监视一次,并随时写入logcat com.google.android.gms.persistent,希望它会写入logcat本身的内容,这将确定哪些应用程序或其他服务正在使用"持久"服务.我看不多,但这里有一些我看到过的东西:

InputReader: Reconfiguring input devices.  changes=0x00000010
WifiService: acquireWifiLockLocked: WifiLock{NlpWifiLock type=2 binder=android.os.BinderProxy@f73f0b8}
LocationFilter: Forcing stable location. Original location:Location[...
ConnectivityService: notifyType CAP_CHANGED for NetworkAgentInfo [WIFI () - 246]
Run Code Online (Sandbox Code Playgroud)

上面的每一行都是在不同的时间,紧接在检测CPU使用情况的日志消息之前(在10ms内)com.google.android.gms.persistent但没有任何明确指示它是否相关.不幸的是,上述情况都没有报告超过10ms的CPU时间,因此 - 即使准确表示使用"持久"的内容仅代表实际CPU时间的一小部分.

研究使用这个过程的其他尝试已经提出了我没有并且从未连接到我的设备的各种东西(例如可穿戴设备).

什么在使用这个过程?我正在寻找这些信息,或者我可以通过其他方式推断出类似于我通过logcat尝试的信息.

更新:我一直在https://android.googlesource.com上寻找源(例如com.google.android.gms.persistent.java或类似的东西),没有任何运气.这不是公共源代码的一部分吗?什么是真正奇怪的是,有甚至没有出现任何文件,如这里:https://android.googlesource.com/platform/frameworks/base/+/33fca8e/docs/html/reference/com/google/安卓/克

更新2:我在"设置" - >"帐户"下禁用了所有同步.这似乎可以减少CPU的使用量,并且电池掉落似乎已经下降到爬行 - 除了定期com.google.android.gms.persistent似乎仍然需要一点CPU.

我现在的工作理论是,无论是否需要,它都会以大约60秒的间隔发出警报,并且该代码正在检查同步工作,如果不需要同步,它会放弃正确的时间片离开,让CPU正常睡觉.然而,我中途不敢相信会使用这么糟糕的设计,因为每分钟唤醒CPU的任何事情都会使电池耗尽更快,即使它只是重新入睡,为什么会使用轮询而不是中断驱动同步的东西?

据我所知(由于无法找到它),com.google.android.gms.persistent的源代码不是开源的,也不是在线提供的.如果我错了,我会接受作为我的问题的答案,任何指向源代码的答案,因为我可以浏览它并自己确定CPU使用的原因.