Android JobScheduler在模拟器上无法启动

10

在Android模拟器上运行时,我无法启动JobScheduler来执行计划任务。如果我在实际的Samsung Galaxy S7和Nexus 5X上测试(两者都运行Android 6.0.1),则计划的作业会立即启动。模拟器配置为具有100%的电池和充电以及启用完整的网络速度。

我正在运行 Android Studio 2.1.1,jre 1.8.0_92-b14,OSX El Capitan 10.11.4 。模拟器版本为 25.1.6,并且它正在运行 Android 6.0

这是我如何安排我的工作:

public static void sendInspectionSessions(Context context) {
    JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
    JobInfo job = new JobInfo.Builder(
            INSPECTION_SESSION_JOB_ID,
            new ComponentName(context, InspectionSessionJobService.class))
            .setBackoffCriteria(TimeUnit.SECONDS.toMillis(30), JobInfo.BACKOFF_POLICY_EXPONENTIAL)
            .setPersisted(true)
            .setMinimumLatency(0)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setOverrideDeadline(Config.INSPECTION_SESSION_SEND_DEADLINE)
            .build();
    int id = js.schedule(job);
    if (id > 0) {
        LogUtil.i(TAG, "Scheduled InspectionSession send job with id " + id + ". Supplied id was " + INSPECTION_SESSION_JOB_ID);
    } else {
        LogUtil.e(TAG, "Failed to schedule InspectionSession send job. Return code was " + id);
    }
}

schedule()在模拟器和设备上都返回1。在模拟器上不会显示任何错误消息。

我已经按照以下方式在AndroidManifest中定义了我的作业服务:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service android:name=".service.InspectionSessionJobService"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="true" />

我有没有遗漏什么,还是这是 Android 模拟器的 bug?有没有人在模拟器上成功使用 JobScheduler?


我甚至会通过ADB来启动这个进程。很多示例都提到了GCMNetworkManager,但如果你对5.0之前的版本不感兴趣的话,就不会涉及到JobScheduler。 - Graham Smith
在我的情况下,起初似乎是服务没有运行的相同问题。但是过了一段时间后,我发现在调用服务之前存在延迟。如果我们将最小延迟设置为0并覆盖截止日期,则服务将几乎立即执行。 - vsatkh
1个回答

0

可能已经太晚了,但是你在哪里调用sendInspectionSessions()函数?你需要将应用程序上下文传递给它。

对于其他人:您可以在应用程序的onCreate()方法中启动它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接