如何每小时创建工作计划?

时间:2019-11-25 13:26:21

标签: android alarmmanager job-scheduling

我已经尝试使用AlarmManagerJobScheduler来实现这一点,但不允许我从后台终止该应用程序。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用WorkerManager。

1)从gradle中包含它

implementation "androidx.work:work-runtime-ktx:2.2.0"

2)继承抽象类Worker,实现“ doWork”方法并将您的逻辑放入该方法中。

class MyWorker(val ctx : Context, params : WorkerParameters) : Worker(ctx, params)
{
    override fun doWork(): Result
    {
        //put your work here
        return Result.success()
    }
}

3)例如,在您的ViewModel中创建WorkManager:

private val workManager = WorkManager.getInstance(applicationContext)

4)在后台开始定期工作:

workManager.enqueueUniquePeriodicWork(
                "workName",
                ExistingPeriodicWorkPolicy.REPLACE,
                PeriodicWorkRequest
                        .Builder(MyWorker::class.java, 30L, TimeUnit.SECONDS)
                        .build())

有关更多信息,请下载官方示例:

git clone -b codelab_start_kt https://github.com/googlecodelabs/android-workmanager

或遵循以下出色的代码实验室:https://codelabs.developers.google.com/codelabs/android-workmanager-kt/index.html#0

答案 1 :(得分:0)

您应该使用具有定期功能的最新WorkManager库。

添加依赖项,如下所示:

// (Java only)
implementation 'androidx.work:work-runtime:2.2.0'

// Kotlin + coroutines
implementation 'androidx.work:work-runtime-ktx:2.2.0'

然后您可以创建一个定期请求,如下所示:

val constraints = Constraints.Builder()
    .setRequiresCharging(true)
    .build()

val saveRequest = PeriodicWorkRequestBuilder<SaveImageToFileWorker>(1, TimeUnit.HOURS)
    .setConstraints(constraints)
    .build()

 WorkManager.getInstance(myContext).enqueue(saveRequest)

有关详细信息,请参见documentation

答案 2 :(得分:0)

正如@Niladree所说,您可以使用Jetpack中的 WorkManager 。但是如果作业的确切时间很重要,则必须使用 警报管理器 广播接收器 ,因为如果在适当的时间(从内存或CPU开始执行),工作经理会在该时间完成工作,并且在某些情况下可能会导致执行延迟。