작업자가 너무 자주 실행되거나 전혀 실행되지 않는 경우 어떤 일이 일어나고 있는지 발견하는 데 도움이 되는 디버깅 단계입니다.
로깅 사용 설정
작업자 인스턴스가 제대로 실행되지 않는 이유를 확인하려면 상세 WorkManager 로그를 확인하는 것이 매우 유용할 수 있습니다. 로깅을 사용 설정하려면 커스텀 초기화가 필요합니다.
먼저, 브라우저 툴바에서 기본 WorkManagerInitializer
새 WorkManager 제공자를 만들어 AndroidManifest.xml
파일을 만듭니다.
매니페스트 병합 규칙 remove
적용됨:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove"/>
이제 기본 WorkManager 이니셜라이저가 사용 중지되었으므로 주문형 초기화를 사용할 수 있습니다.
이렇게 하려면 android.app.Application
클래스에서 구현을 제공해야 합니다.
androidx.work.Configuration.Provider
:
Kotlin
class MyApplication() : Application(), Configuration.Provider { override fun getWorkManagerConfiguration() = Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.DEBUG) .build() }
자바
public class MyApplication extends Application implements Configuration.Provider { @NonNull @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.DEBUG) .build(); } }
맞춤 WorkManager 구성을 정의할 때 WorkManager는
호출 시 초기화됨
WorkManager.getInstance(Context)
드림
할 수 있습니다. 맞춤 WorkManager를 참조하세요.
구성 및
초기화
이전 버전의 WorkManager 지원 등 자세한 내용을 확인하세요.
2.1.0.
DEBUG
로깅을 사용 설정하면
로그 태그 접두사 WM-
를 사용하면 훨씬 더 많은 로그를 볼 수 있습니다.
adb shell dumpsys jobscheduler 사용
adb
를 사용하여 Android 6.0에서의 작업 예약에 관한 자세한 정보를 얻을 수 있습니다.
(API 수준 23) 이상 adb
를 처음 사용하는 경우 명령줄
도구를 참조하세요.
adb
가 설치되었으면 다음 명령어를 실행하여
다음과 같은 작업을 수행합니다.
adb shell dumpsys jobscheduler
출력은 다음과 같이 표시됩니다.
JOB #u0a172/4: 6412553 com.google.android.youtube/androidx.work.impl.background.systemjob.SystemJobService
u0a172 tag=*job*/com.google.android.youtube/androidx.work.impl.background.systemjob.SystemJobService
Source: uid=u0a172 user=0 pkg=com.google.android.youtube
JobInfo:
Service: com.google.android.youtube/androidx.work.impl.background.systemjob.SystemJobService
Requires: charging=false batteryNotLow=false deviceIdle=false
Extras: mParcelledData.dataSize=180
Network type: NetworkRequest [ NONE id=0, [ Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&VALIDATED Uid: 10172] ]
Minimum latency: +1h29m59s687ms
Backoff: policy=1 initial=+30s0ms
Has early constraint
Required constraints: TIMING_DELAY CONNECTIVITY [0x90000000]
Satisfied constraints: DEVICE_NOT_DOZING BACKGROUND_NOT_RESTRICTED WITHIN_QUOTA [0x3400000]
Unsatisfied constraints: TIMING_DELAY CONNECTIVITY [0x90000000]
Tracking: CONNECTIVITY TIME QUOTA
Implicit constraints:
readyNotDozing: true
readyNotRestrictedInBg: true
Standby bucket: RARE
Base heartbeat: 0
Enqueue time: -51m29s853ms
Run time: earliest=+38m29s834ms, latest=none, original latest=none
Last run heartbeat: 0
Ready: false (job=false user=true !pending=true !active=true !backingup=true comp=true)
WorkManager를 사용할 때 작업자 실행을 관리하는 구성요소
API 수준 23 이상에서 SystemJobService
입니다. 작업 인스턴스를 찾습니다.
어텐션 메커니즘에 해당하는
androidx.work.impl.background.systemjob.SystemJobService
모든 작업에서 명령어의 출력에는 required, satisfied, unsatisfied 제약 조건이 나열됩니다. 작업자의 제약 조건이 다음과 같은지 확인 매우 만족스럽습니다.
출력에는 최근에 실행된 작업의 작업 기록도 포함되므로
SystemJobService
가 최근에 호출되었는지 확인합니다.
Job history:
-1h35m26s440ms START: #u0a107/9008 com.google.android.youtube/androidx.work.impl.background.systemjob.SystemJobService
-1h35m26s362ms STOP-P: #u0a107/9008 com.google.android.youtube/androidx.work.impl.background.systemjob.SystemJobService app called jobFinished
WorkManager 2.4.0 이상에서 진단 정보 요청
앱의 디버그 빌드에서 WorkManager 2.4.0 이상에서는 다음 명령어를 사용합니다.
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
그러면 다음에 관한 정보가 제공됩니다.
- 지난 24시간 이내에 완료된 작업 요청입니다.
- 현재 실행 중인 작업 요청
- 예약된 작업 요청입니다.
다음과 같이 표시될 수 있습니다(logcat
을 통해 출력이 표시됨).
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "androidx.work.integration.testapp"
adb logcat
...
2020-02-13 14:21:37.990 29528-29660/androidx.work.integration.testapp I/WM-DiagnosticsWrkr: Recently completed work:
2020-02-13 14:21:38.083 29528-29660/androidx.work.integration.testapp I/WM-DiagnosticsWrkr: Id Class Name State Unique Name Tags
08be261c-2def-4bd6-a716-1e4410968dc4 androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
48ce04f1-8df9-450b-96ec-6eceabb9c690 androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
c46f4699-c384-440c-a10e-26d56ce02963 androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
ce125372-046e-484e-949f-9abb35ce62c3 androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
72887ddd-8ed1-4018-b798-fac218e95e16 androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
dcff3d61-320d-4996-8644-5d97944bd09c androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
acab0bf7-6087-43ad-bdb5-be0df9195acb androidx.work.impl.workers.DiagnosticsWorker SUCCEEDED null androidx.work.impl.workers.DiagnosticsWorker
23136bcd-01dd-46eb-b910-0fe8a140c2a4 androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
245f4879-c6d2-4997-8130-e4e90e1cab4c androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
17d05835-bb61-429a-ad11-fe43fc320a54 androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
e95f12be-4b0c-4e64-88da-8ee07a31e42f androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
431c3ec2-4a55-469b-b50b-4072d35f1232 androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
883a388f-f911-4098-9143-37bd8fbc098a androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
b904163c-6822-4299-8d5a-78df49b7e53d androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
453fd7b9-2b16-45b9-abc5-3d2ce7b6a4ba androidx.work.integration.testapp.ToastWorker SUCCEEDED null androidx.work.integration.testapp.ToastWorker
2020-02-13 14:21:38.083 29528-29660/androidx.work.integration.testapp I/WM-DiagnosticsWrkr: Running work:
2020-02-13 14:21:38.089 29528-29660/androidx.work.integration.testapp I/WM-DiagnosticsWrkr: Id Class Name State Unique Name Tags
b87c8a4f-4ac6-4e25-ba3e-4cea53ce468a androidx.work.impl.workers.DiagnosticsWorker RUNNING null androidx.work.impl.workers.DiagnosticsWorker
...