【发布时间】:2018-01-29 16:17:22
【问题描述】:
我正在尝试制作一个定期运行且需要连接到网络的后台作业。我正在以这种方式使用 JobScheduler 服务安排作业:
JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
if(js!=null) {
if (js.getAllPendingJobs().size() == 0) {//No jobs scheduled in previous boots. Schedule one
JobInfo.Builder b = new JobInfo.Builder(1, new ComponentName("my.app.name", MyJob.class.getName()));
b.setPeriodic(420000);
b.setPersisted(true);
b.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
js.schedule(b.build());
}
}
当屏幕打开时,作业可以正常运行,但一旦关闭,它就不再运行,直到再次打开(然后立即启动)。 我猜它没有运行,因为当设备空闲时没有网络连接(即使我检查了设备 Wi-Fi 和 3G 选项说在空闲时保持连接活动)。
即使设备处于空闲/屏幕关闭状态,如何让我的服务运行?
【问题讨论】:
-
您也可能会进入打瞌睡模式——每 7 分钟都在运行,对吧?当手机打瞌睡时,你每 15 次不能跑超过一次,并且会被推迟,直到手机决定让你跑。如果长时间打瞌睡,你的跑步频率可能会更低。
-
是的,它试图每 7 分钟运行一次。我不知道打盹模式,它可能是罪魁祸首。我会测试它更多时间,看看作业最终是否运行,但我已经测试了大约半小时,它还没有运行。
-
不管打盹模式,作业调度程序的最小周期间隔为 15 分钟。看到这篇文章:stackoverflow.com/questions/48248172/
-
我现在将时间更改为 15 分钟,我看到即使在屏幕关闭的情况下,计划作业现在也正在正确执行
标签: android android-jobscheduler