Android中定时作业执行的当前最佳实践

时间:2019-05-23 10:21:20

标签: android time alarmmanager

由于我在Android Oreo背景限制方面苦苦挣扎,因此我一直在问自己,使用align是否是将Job执行定时为例如的最佳方法。上午03:00。我看到有人使用aligned,但似乎并不适合每天在给定时间执行任务。

我只是尝试将AlarmManagerJobScheduler一起使用,然后将AlarmManager插入(理论上)自启动服务中,但是由于应用程序无法调用{ {1}}在后​​台运行时,也无法达到应有的效果(而且似乎有些错误)。

我想念什么吗?目前要走的路是什么? 显然有办法,因为否则Messenger,Games和其他应用程序将无法正常工作。

BroadcastReceiver
BroadcastReceiver

每次MainActivity启动时都会调用registerWorker(在应用程序启动时==>)

1 个答案:

答案 0 :(得分:1)

使用 WorkManager 来安排backgroundforeground

中的任务

定期请求

的示例
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

您也可以转换时间 Android / Java convert String date to long type