gpt4 book ai didi

android - 有哪些工具可用于测试 JobScheduler?

转载 作者:IT王子 更新时间:2023-10-28 23:44:23 28 4
gpt4 key购买 nike

我们正在通过 JobScheduler 实现作业用于后台加载数据。这项工作每天大约会触发一次。我们可以使用哪些工具来测试此功能(可能是 ADB)?

用例能够模拟作业运行所需的条件,或者只是明确地说“运行此作业”作为我们自动化测试套件的一部分。

最佳答案

没错。
Henning 和 P4u144 让我走上了正确的道路,可以更详细地回答这个问题。

识别所有已注册的职位

使用 adb shell dumpsys jobscheduler 命令确定您的任务。
这将为您提供以下类别的大量输出。

  • 设置
  • 已注册 XX 个职位
  • 连接性
  • 警报
  • 空闲
  • 电池
  • AppIdle
  • 内容
  • 工作经历
  • 等待队列

您最有可能感兴趣的类别是已注册 XX 工作。这会告诉您设备上安排了多少作业。
例如,您的包名是 com.foo.bar.application,您应该会看到如下条目:

JOB #u0a93/17: eec3709 com.foo.bar.application/com.evernote.android.job.v21.PlatformJobService
u0a93 tag=*job*/com.foo.bar.application/com.evernote.android.job.v21.PlatformJobService
Source: uid=u0a93 user=0 pkg=com.foo.bar.application
JobInfo:
Service: com.foo.bar.application/com.evernote.android.job.v21.PlatformJobService
PERIODIC: interval=+15m0s0ms flex=+5m0s0ms
PERSISTED
Requires: charging=false deviceIdle=false
Network type: 2
Backoff: policy=1 initial=+30s0ms
Has early constraint
Has late constraint
Required constraints: TIMING_DELAY DEADLINE UNMETERED
Satisfied constraints: CONNECTIVITY NOT_ROAMING APP_NOT_IDLE DEVICE_NOT_DOZING
Unsatisfied constraints: TIMING_DELAY DEADLINE UNMETERED
Earliest run time: 07:23
Latest run time: 12:23
Ready: false (job=false pending=false active=false user=true)

Tip: Use adb shell dumpsys jobscheduler | grep com.foo.bar.application to quickly filter the list.

现在您可以轻松确定您的工作是否已按照正确的标准注册。

FireBaseJobdispatcher

如果您使用 FirebaseJobDispatcher 库,您可以使用

adb shell dumpsys activity service GcmService | grep com.foo.bar.debug
com.foo.bar.debug:0 v853
u0|com.foo.bar.debug: 3
(scheduled) com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="com.foo.bar.debug.job.FetchArticlesJob" trigger=window{start=10800s,end=11700s,earliest=10448s,latest=11348s} requirements=[NET_UNMETERED,DEVICE_IDLE] attributes=[PERSISTED,RECURRING] scheduled=-351s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(scheduled) com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="com.foo.bar.debug.job.FetchNotificationGroupsJob" trigger=window{start=86400s,end=129600s,earliest=86048s,latest=129248s} requirements=[NET_CONNECTED,CHARGING] attributes=[PERSISTED,RECURRING] scheduled=-351s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(scheduled) com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="com.foo.bar.debug.job.RemoveUnusedRealmArticlesJob" trigger=window{start=577980s,end=608400s,earliest=521961s,latest=552381s} requirements=[NET_ANY] attributes=[PERSISTED,RECURRING] scheduled=-56018s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(finished) [com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver:com.foo.bar.debug.job.UpdateNotificationGroupJob,u0]
(finished) [com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver:com.foo.bar.debug.job.UpdatePushTokenJob,u0]
(finished) [com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver:com.foo.bar.debug.job.FetchArticlesJob,u0]

检查您的服务是否已安排或运行。

强制你的任务运行

创建 Job 时,您会返回一个 JOB_ID
使用此 JOB_ID 强制作业运行。
您可以使用 adb shell cmd jobscheduler run 命令来执行此操作(需要 Android 7.1 或更高版本)。

例如,您的包名是 com.foo.bar.application,而 JOB_ID 是 1。您现在可以通过 adb

运行您的任务
adb shell cmd jobscheduler run -f com.foo.bar.application 1

不要忘记 -f 选项,因为即使不满足设置的限制,这也会强制作业运行。

Evernote Android 作业库

最后但同样重要的是。
使用the wonderful library from Evernote为此。
它允许使用 JobSchedulerGcmNetworkManagerAlarmManager 在较低 API 级别上轻松向后移植 JobScheduler,具体取决于您的API 级别。

24/08 编辑

更好地使用 firebase 作业调度程序库。

The Firebase JobDispatcher is a library for scheduling background jobs in your Android app. It provides a JobScheduler-compatible API that works on all recent versions of Android (API level 9+) that have Google Play services installed.

我希望这会有所帮助。

谢谢

2019 年 4 月 28 日编辑

两者Evernote Android-JobFirebase JobDispatcher现在处于仅维护模式,他们都建议使用喷气背包的WorkManager适合这类工作。

编辑 10/06/202

Android Jetpack WorkManager 使诊断变得稍微容易一些。
首先你需要为你的包启用诊断

adb shell am broadcast -a 'androidx.work.diagnostics.REQUEST_DIAGNOSTICS' -p 'com.foo.bar.application'

之后你可以WorkManager将信息转储到ADB Logcat中,你可以通过输入观察。

adb logcat

或者通过Android Studio Logcat工具窗口

关于android - 有哪些工具可用于测试 JobScheduler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com