Даже когда ничего не происходит, этот системный процесс, похоже, использует устойчивую 1-2% от CPU. В течение дня это истощает значительное количество батареи, даже если устройство не использовалось ни для чего. Я не смог сопоставить его с другими приложениями, потому что даже когда они использовали только несколько секунд времени процессора каждый в течение нескольких часов, этот процесс использует минуты.
Он все еще работает, даже если я:
- отключить WiFi
- отключить BlueTooth
- отключить службы определения местоположения
- отключить все, кроме минимальной синхронизации (например, GMail)
Я написал небольшое тестовое приложение, которое отслеживает /proc/<pid>/stat
каждые 10 мс и записывает в logcat в любое время com.google.android.gms.persistent
, надеясь, что он напишет что-то для логарифма, который бы точно определял, какое приложение или другая служба использует "постоянный" для своего Сервисы. Я не вижу многого, но вот несколько вещей, которые я видел:
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]
Каждая строка выше была в другое время, непосредственно предшествующее (в течение 10 мс) сообщение журнала, определяющее использование ЦП с помощью com.google.android.gms.persistent
, но без какой-либо четкой индикации того, связано ли это. К сожалению, ни один из вышеприведенных отчетов не превышает 10 мс времени процессора, и поэтому - даже если точное обозначение того, что использует "постоянный", представляет собой лишь небольшую часть используемого времени процессора.
Другие попытки исследования того, что использует этот процесс, предложили различные вещи (например, носимые), которых у меня нет, и никогда не подключались к моему устройству.
Что такое этот процесс? Я ищу эту информацию напрямую, или для дополнительных способов я могу вывести эту информацию, подобную моим попыткам с помощью 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: я отключил все синхронизации в разделе "Настройки" → "Аккаунты". Это, по-видимому, снижает загрузку процессора немного больше, и падение батареи, кажется, упало до обхода - за исключением периодически com.google.android.gms.persistent все еще, кажется, занимает пакет CPU.
Моя рабочая теория теперь заключается в том, что она имеет тревогу, которая срабатывает примерно через 60 секунд независимо от того, нужна она или нет, и этот код проверяет работу синхронизации, и если ничего не нужно синхронизировать, он отказывается от и сразу же перейдет в режим ожидания. Тем не менее, я на полпути не могу поверить, что такой ужасный дизайн будет использоваться, поскольку все, что просыпает процессор каждую минуту, обязательно разряжает батарею намного быстрее, даже если она просто заснет и почему будет использоваться опрос вместо чего что-то прерывается для синхронизации в любом случае?
Насколько я могу судить (из-за того, что не смог найти его), исходный код для com.google.android.gms.persistent не является открытым исходным кодом или доступен в Интернете в любом месте. Если я ошибаюсь, я бы принял в качестве ответа на мой вопрос, любой ответ, который будет указывать на исходный код, поскольку я мог бы просмотреть его и определить для себя, почему использование ЦП.