如何解决实现定期任务管理器的正确方法是什么?
我使用了 PeriodicWorkerManager,它将在指定的给定时间(每 24 小时)执行一次。我想知道实现 PeriodicWorkManager 的正确方法是什么。如果活动被销毁或重新创建,如何处理任务。
这是我的代码, 我在 Application 类上定义了 periodWorkManager
class App : Application() {companion object {
@get:Synchronized
var instance = App()
val constraint: Constraints = Constraints.Builder().setrequiredNetworkType(NetworkType.CONNECTED).build()
val periodicWorkRequest : PeriodicWorkRequest = PeriodicWorkRequest.Builder(TaskManager::class.java,1,TimeUnit.DAYS).setConstraints(constraint).setBackoffCriteria(BackoffPolicy.LINEAR,PeriodicWorkRequest.MIN_BACKOFF_MILLIS,TimeUnit.MILLISECONDS).build()
}}
任务管理器类
class TaskManager(context: Context,workerParams: WorkerParameters) : Worker(context,workerParams) {
private val TAG = "SEND_ANALYTICS_REPORT"
companion object {
@get:Synchronized
var instance = TaskManager(context)
}
override fun doWork(): Result {
try {
//Log.d("WorkerManager","TaskManager ${Result.success()}")
//EventBus.getDefault().post(WorkReport("SUCCESS"))
return Result.success()
}catch (e:Exception){
return Result.failure()
}
}
}
我正在处理 WorkManager 任务响应的当前片段
private var workManager = WorkManager.getInstance()
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
workManager.enqueueUniquePeriodicWork(SEND_ANALYTICS_REPORT,ExistingPeriodicWorkPolicy.KEEP,App.periodicWorkRequest)
observeTaskManager()
}
private fun observeTaskManager(){
WorkManager.getInstance().getWorkInfoByIdLiveData(App.periodicWorkRequest.id)
.observe(viewLifecycleOwner,Observer<WorkInfo> { workInfo ->
val status = workInfo.state.name
Log.d("Worker","${status}")
if((workInfo != null) && (workInfo.state == WorkInfo.State.RUNNING)){
observeAnalytics()
}
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。