【问题标题】:How to create Job Schedule for every hour?如何创建每小时的作业计划?
【发布时间】:2019-11-25 23:21:40
【问题描述】:

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

【问题讨论】:

  • 当应用程序被强制停止时,作业将被停止并且不再工作。
  • 使用前台服务来做到这一点!!
  • 请提供您已经尝试过的代码 sn-ps。

标签: android alarmmanager job-scheduling


【解决方案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

【讨论】:

  • PeriodicWorkRequest 至少需要 15 分钟才能开始!
【解决方案2】:

正如@Niladree 所说,您可以使用 WorkManager,它是喷气背包的一部分。但如果工作的准确时间很重要,您必须使用带有广播接收器警报管理器 >,因为工作管理器会在内存或 CPU 执行的适当时间按时完成工作,并且在某些情况下可能会导致执行延迟。

【讨论】:

    【解决方案3】:

    您应该使用具有周期性功能的最新 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 2010-11-05
    • 2022-05-27
    • 2012-05-10
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多