在不同的数据集上多次运行后台操作的最佳方法是什么,只有一个实例在后台运行?
答案 0 :(得分:3)
您可以使用WorkManager架构组件来实现它。按如下方式安排PeriodicWorkRequest
:
创建工人类:
public class MyWorker 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.)
}
}
安排工作:
PeriodicWorkRequest periodicWork = new
PeriodicWorkRequest.Builder(MyWorker.class, 12, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(periodicWork);
这会创建一个PeriodicWorkRequest,每12个小时定期运行一次。
您可以在SO上查看我的答案,其中描述了WorkManager是否适合您的用例。
支持的最低API为14。
根据文档:
- WorkManger使用JobScheduler for API 23 +
API 14-22
- 如果在应用和可选的Firebase中使用Firebase JobDispatcher 依赖项,使用Firebase JobDispatcher
- 否则,使用自定义 AlarmManager + BroadcastReceiver实现