有什么工具可以testingJobScheduler?

我们通过JobScheduler实现了一个Job,用于后台加载数据。 这项工作将每天发射一次。 我们有什么工具可以testing这个function(可能是ADB)?

用例应该能够模拟Job运行所需的条件,或者只是说明“运行这个工作”作为我们自动化testing套件的一部分。

Solutions Collecting From Web of "有什么工具可以testingJobScheduler?"

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

确定所有注册的工作

使用adb shell dumpsys jobscheduler命令识别您的任务。
这会给你以下类别的巨大输出。

  • 设置
  • 注册XX工作
  • 连接
  • 警报
  • 电池
  • AppIdle
  • 内容
  • 工作经历
  • 等待队列

您最有可能感兴趣的类别是“ 注册XX作业” 。 这会告诉您设备上计划了多less个作业。
例如,你的包名是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) 

提示:使用adb shell dumpsys jobscheduler | grep com.foo.bar.application adb shell dumpsys jobscheduler | grep com.foo.bar.application快速过滤列表。

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

强制您的任务运行

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

例如,您的软件包名称是com.foo.bar.applicationJOB_ID是1.您现在可以通过adb运行您的任务

 adb shell cmd jobscheduler run -f com.foo.bar.application 1 

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

Evernote Android工作库

最后但并非最不重要的。
为此,使用来自Evernote的精彩库 。
它允许使用JobSchedulerGcmNetworkManagerAlarmManager根据您的API级别在较低的API级别上简单地向后GcmNetworkManager AlarmManager

编辑24/08

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

Firebase JobDispatcher是一个用于在您的Android应用程序中安排后台作业的库。 它提供了一个兼容JobScheduler的API,可用于安装了Google Play服务的所有最新版本的Android(API级别9+)。

我希望这有助于。

谢谢

从Android 7.0开始,adb shell有一个新的cmd 。 在7.1中(仅在预览中), adb shell cmd jobscheduler已经被添加,你可以在这里看到强制运行你的JobScheduler。 帮助说:

Job scheduler(jobscheduler)命令:help打印帮助文本。

运行[-f | –force] [-u | –user USER_ID] PACKAGE JOB_ID触发立即执行特定的预定作业。 选项:-f或–force:即使当前未满足技术限制(如连接性),也要运行作业-u或–user:指定要运行哪个用户的作业; 默认是主用户或系统用户

使用命令adb shell dumpsys jobscheduler可以获得有关当前计划和活动作业的信息。

我注意到,Android 6和7之间的命令输出差别很大。使用Android 6设备时,输出非常短暂,有时也很隐秘。 注册工作的有趣部分在这里build立,这应该有助于破译。

另一方面,Android 7设备具有非常长的输出,具有更详细和更好的可读信息。 还有更多的function,如历史。 缺点是你必须先find有趣的部分。

我还没有find一种方法来强制工作,但有一个function要求。 请参阅p4u144的答案。