由于我在Android Oreo背景限制方面苦苦挣扎,因此我一直在问自己,使用align
是否是将Job执行定时为例如的最佳方法。上午03:00。我看到有人使用aligned
,但似乎并不适合每天在给定时间执行任务。
我只是尝试将AlarmManager
与JobScheduler
一起使用,然后将AlarmManager
插入(理论上)自启动服务中,但是由于应用程序无法调用{ {1}}在后台运行时,也无法达到应有的效果(而且似乎有些错误)。
我想念什么吗?目前要走的路是什么? 显然有办法,因为否则Messenger,Games和其他应用程序将无法正常工作。
BroadcastReceiver
BroadcastReceiver
每次MainActivity启动时都会调用registerWorker(在应用程序启动时==>)
答案 0 :(得分:1)
使用 WorkManager 来安排background
和foreground
定期请求
的示例PeriodicWorkRequest request= new PeriodicWorkRequest.Builder(WorkerClass.class,
24, TimeUnit.HOURS).setInitialDelay(THE_DELAY,TimeUnit.SECONDS).addTag("TAG").build()
WorkManager.getInstance().enqueueUniquePeriodicWork("TAG", ExistingPeriodicWorkPolicy.KEEP, request);
一次请求的示例 创建一个工人阶级
public class WorkerClass extends Worker {
@Override
public Worker.WorkerResult doWork() {
// Do the work here
// Indicate success or failure with your return value:
return WorkerResult.SUCCESS;
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
现在通过以下方式调用该课程
OneTimeWorkRequest request= new OneTimeWorkRequest.Builder(WorkerClass .class)
.setInitialDelay(delayedTime, TimeUnit.MILLISECONDS)
.addTag("TAG")
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("TAG", ExistingPeriodicWorkPolicy.KEEP, request);
其中delayedTime
是计算完成任务的时间
将此添加到 build.gradle
implementation 'android.arch.work:work-runtime:2.1.0-alpha02'
查看最新版本的文档 https://developer.android.com/jetpack/androidx/releases/work