Ведение журнала WorkManager Workers - PullRequest
4 голосов
/ 25 апреля 2020

Я пытаюсь получить некоторую информацию о журналировании WorkManager Рабочих, которые работают в моем приложении. Я использую версию 2.4.0-alpha01, в которой используется новая диагностика, добавленная Android Framework Team

https://developer.android.com/jetpack/androidx/releases/work#2 .4.0-alpha01

Они дали мне команду выполнить следующая команда

adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"

когда я выполнил эту команду, она просто повторила

Broadcast completed: result=0 

на терминал

Затем они сообщили мне, что я должен увидеть диагностику в logcat, запустив

adb logcat

Я выполнил эту команду, и выходные данные журналов выглядят так, как будто они запутаны, и я не вижу никаких журналов, указывающих c моим работникам.

Как вы go анализируете эти журналы, чтобы получить информацию о ваших рабочих WorkManager?

Обновление

Теперь я вижу журналы WorkManager, потому что у меня есть добавлен WM- в качестве ключевого слова для поиска в logcat.

Я заметил, что некоторые из моих работников перестали работать, и я не понимаю, почему.

Это журналы, начинающиеся с последний успешный работник

2020-04-27 10:52:32.439 com.sampleapp.android.staging.debug D/WM-StopWorkRunnable: StopWorkRunnable for 58c8d95c-4cbc-4a85-aa18-a93e9926019a; Processor.stopWork = false
2020-04-27 10:52:35.304 com.sampleapp.android.staging.debug D/WM-WorkerWrapper: com.sampleapp.android.common.workers.DownloadMediaWorker returned a Success {mOutputData=Data {MEDIA_ITEM_ID : 16503, }} result.
2020-04-27 10:52:35.308 com.sampleapp.android.staging.debug I/WM-WorkerWrapper: Worker result SUCCESS for Work [ id=b892f6fc-79e4-4475-8da6-d151f217bf59, tags={ com.sampleapp.android.common.workers.DownloadMediaWorker, DOWNLOAD_MEDIA_ITEM_16_1_1 } ]
2020-04-27 10:52:35.314 com.sampleapp.android.staging.debug D/WM-Processor: Processor b892f6fc-79e4-4475-8da6-d151f217bf59 executed; reschedule = false
2020-04-27 10:52:35.315 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Stopping tracking for b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.316 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 591f9f8f-a938-44ce-962d-5ef952dc01c9
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 25fc121b-3036-454e-ae89-da6a715ae570
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 47c4e47a-a66e-49aa-83b8-8670aae4b797
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 954adf4b-246a-4cff-bcd0-c6a6d6b27e2e
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for e30b4db8-648a-4f55-8cb8-b6a6d098c46a
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for cb1320f6-2510-430f-a400-2b12c85d4a1c
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.317 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for cbbe8de7-be76-4f03-8d26-79bf03af1314
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 591f9f8f-a938-44ce-962d-5ef952dc01c9
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 25fc121b-3036-454e-ae89-da6a715ae570
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Cancelling work ID b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 47c4e47a-a66e-49aa-83b8-8670aae4b797
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 954adf4b-246a-4cff-bcd0-c6a6d6b27e2e
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID e30b4db8-648a-4f55-8cb8-b6a6d098c46a
2020-04-27 10:52:35.318 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID cb1320f6-2510-430f-a400-2b12c85d4a1c
2020-04-27 10:52:35.319 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.319 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID cbbe8de7-be76-4f03-8d26-79bf03af1314
2020-04-27 10:52:35.319 com.sampleapp.android.staging.debug D/WM-SystemJobService: b892f6fc-79e4-4475-8da6-d151f217bf59 executed on JobScheduler
2020-04-27 10:52:35.320 com.sampleapp.android.staging.debug D/WM-SystemJobService: onStopJob for b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.324 com.sampleapp.android.staging.debug D/WM-Processor: Work 591f9f8f-a938-44ce-962d-5ef952dc01c9 is already enqueued for processing
2020-04-27 10:52:35.324 com.sampleapp.android.staging.debug D/WM-Processor: Work 25fc121b-3036-454e-ae89-da6a715ae570 is already enqueued for processing
2020-04-27 10:52:35.326 com.sampleapp.android.staging.debug D/WM-Processor: Processor stopping background work b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.326 com.sampleapp.android.staging.debug D/WM-Processor: WorkerWrapper could not be found for b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.326 com.sampleapp.android.staging.debug D/WM-StopWorkRunnable: StopWorkRunnable for b892f6fc-79e4-4475-8da6-d151f217bf59; Processor.stopWork = false
2020-04-27 10:52:35.326 com.sampleapp.android.staging.debug D/WM-Processor: Work 47c4e47a-a66e-49aa-83b8-8670aae4b797 is already enqueued for processing
2020-04-27 10:52:35.326 com.sampleapp.android.staging.debug D/WM-Processor: Work 954adf4b-246a-4cff-bcd0-c6a6d6b27e2e is already enqueued for processing
2020-04-27 10:52:35.326 com.sampleapp.android.staging.debug D/WM-Processor: Work e30b4db8-648a-4f55-8cb8-b6a6d098c46a is already enqueued for processing
2020-04-27 10:52:35.327 com.sampleapp.android.staging.debug D/WM-Processor: Work cb1320f6-2510-430f-a400-2b12c85d4a1c is already enqueued for processing
2020-04-27 10:52:35.327 com.sampleapp.android.staging.debug D/WM-Processor: Processor: processing b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.327 com.sampleapp.android.staging.debug D/WM-Processor: Work cbbe8de7-be76-4f03-8d26-79bf03af1314 is already enqueued for processing
2020-04-27 10:52:35.328 com.sampleapp.android.staging.debug D/WM-Processor: Processor stopping background work b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.329 com.sampleapp.android.staging.debug D/WM-WorkerWrapper: Work interrupted for null
2020-04-27 10:52:35.330 com.sampleapp.android.staging.debug D/WM-WorkerWrapper: WorkSpec null is already done. Not interrupting.
2020-04-27 10:52:35.331 com.sampleapp.android.staging.debug D/WM-Processor: WorkerWrapper interrupted for b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.331 com.sampleapp.android.staging.debug D/WM-StopWorkRunnable: StopWorkRunnable for b892f6fc-79e4-4475-8da6-d151f217bf59; Processor.stopWork = true
2020-04-27 10:52:35.331 com.sampleapp.android.staging.debug D/WM-Processor: Processor b892f6fc-79e4-4475-8da6-d151f217bf59 executed; reschedule = false
2020-04-27 10:52:35.331 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Stopping tracking for b892f6fc-79e4-4475-8da6-d151f217bf59
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 591f9f8f-a938-44ce-962d-5ef952dc01c9
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 25fc121b-3036-454e-ae89-da6a715ae570
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 47c4e47a-a66e-49aa-83b8-8670aae4b797
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for 954adf4b-246a-4cff-bcd0-c6a6d6b27e2e
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for e30b4db8-648a-4f55-8cb8-b6a6d098c46a
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for cb1320f6-2510-430f-a400-2b12c85d4a1c
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-WorkConstraintsTrack: Constraints met for cbbe8de7-be76-4f03-8d26-79bf03af1314
2020-04-27 10:52:35.332 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 591f9f8f-a938-44ce-962d-5ef952dc01c9
2020-04-27 10:52:35.333 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 25fc121b-3036-454e-ae89-da6a715ae570
2020-04-27 10:52:35.333 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 47c4e47a-a66e-49aa-83b8-8670aae4b797
2020-04-27 10:52:35.333 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID 954adf4b-246a-4cff-bcd0-c6a6d6b27e2e
2020-04-27 10:52:35.333 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID e30b4db8-648a-4f55-8cb8-b6a6d098c46a
2020-04-27 10:52:35.333 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID cb1320f6-2510-430f-a400-2b12c85d4a1c
2020-04-27 10:52:35.333 com.sampleapp.android.staging.debug D/WM-GreedyScheduler: Constraints met: Scheduling work ID cbbe8de7-be76-4f03-8d26-79bf03af1314
2020-04-27 10:52:35.340 com.sampleapp.android.staging.debug D/WM-WorkerWrapper: Work interrupted for Work [ id=b892f6fc-79e4-4475-8da6-d151f217bf59, tags={ com.sampleapp.android.common.workers.DownloadMediaWorker, DOWNLOAD_MEDIA_ITEM_16_1_1 } ]
2020-04-27 10:52:35.342 com.sampleapp.android.staging.debug D/WM-Processor: Work 591f9f8f-a938-44ce-962d-5ef952dc01c9 is already enqueued for processing
2020-04-27 10:52:35.342 com.sampleapp.android.staging.debug D/WM-Processor: Work 25fc121b-3036-454e-ae89-da6a715ae570 is already enqueued for processing
2020-04-27 10:52:35.343 com.sampleapp.android.staging.debug D/WM-Processor: Work 47c4e47a-a66e-49aa-83b8-8670aae4b797 is already enqueued for processing
2020-04-27 10:52:35.343 com.sampleapp.android.staging.debug D/WM-Processor: Work 954adf4b-246a-4cff-bcd0-c6a6d6b27e2e is already enqueued for processing
2020-04-27 10:52:35.343 com.sampleapp.android.staging.debug D/WM-Processor: Work e30b4db8-648a-4f55-8cb8-b6a6d098c46a is already enqueued for processing
2020-04-27 10:52:35.343 com.sampleapp.android.staging.debug D/WM-Processor: Work cb1320f6-2510-430f-a400-2b12c85d4a1c is already enqueued for processing
2020-04-27 10:52:35.343 com.sampleapp.android.staging.debug D/WM-Processor: Work cbbe8de7-be76-4f03-8d26-79bf03af1314 is already enqueued for processing
2020-04-27 10:52:35.559 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -68]
2020-04-27 10:52:56.786 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -65]
2020-04-27 10:53:09.183 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -67]
2020-04-27 10:53:18.379 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -65]
2020-04-27 10:53:27.594 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -67]
2020-04-27 10:53:30.602 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -66]
2020-04-27 10:53:58.250 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -67]
2020-04-27 10:54:01.367 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -66]
2020-04-27 10:56:10.497 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -67]
2020-04-27 10:56:13.536 com.sampleapp.android.staging.debug D/WM-NetworkStateTracker: Network capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -65]

Что именно это логи говорят? Почему мои работники перестают работать?

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

Есть много вещей, которые могут повлиять на работу WorkManager. Согласно журналам, это не происходит из-за исключений, которые могли быть добавлены в ваших работников. Важно помнить, что один и тот же код может работать по-разному на разных OEM-производителях.

Вот несколько вещей, которые необходимо проверить:

Первый , WorkManager использует другие механизмы внутреннего планирования:

  • JobScheduler
  • FirebaseJobDispatcher
  • AlarmManager

Все они имеют свои собственные ограничения. Например, планировщик заданий имеет 10-минутный лимит для выполнения своей задачи.

Второй - это API самого Work Manager: если запланировано задание с тем же именем и политикой REPLACE текущий работник останавливается.

Третий - ограничения. Если ограничения больше не выполняются, например, проблема с сетевым подключением, задание будет отменено.

Forth - это маловероятно в любом конкретном случае, но везде есть ошибки: https://issuetracker.google.com/issues/140055777

Пятый . Скорее всего, однако, рабочий остановлен из-за режима Doze или других фоновых оптимизаций работы: https://developer.android.com/training/monitoring-device-state/doze-standby

Чтобы проверить, так ли это, вы можете сделать следующий трюк:

1) Отправьте сообщение Toast в вызове рабочих onStop(), когда BuildConfig.DEBUG имеет значение true. Таким образом, вы заметите, когда работник останавливается.

2) Попробуйте получить WakeLock, который не позволит вашему приложению и телефону перейти в спящий режим (только на время отладки): https://developer.android.com/training/scheduling/wakelock Таким образом, вы можете проверить, если работники умирают в случае, если телефон не засыпает.

Затем, если ваши эксперименты показывают, что рабочий умирает из-за оптимизации батареи, вы можете либо получить пробуждения от чего-то действительно важного, либо просто заставить работай идемпотентно и пиши рабочим так, чтобы можно было остановить и перезапустить работника где-нибудь в будущем. В конце концов, это причина, по которой пришли все ограничения - мы хотим сэкономить батареи пользователей.

0 голосов
/ 25 апреля 2020

Из тестов, которые я провел с 2.4.0-alpha02, вывод не запутывается.

Имейте в виду, что это работает только для ваших отладочных сборок.

Альтернативой является настроить уровень ведения журнала WorkManager, как описано в this codelab .

...