Android版本:8.1.0
设备:Infinix X604B
Workmanager:1.0.0-alpha11(最新版本)
安排一个PeriodicWorkRequest每15分钟运行一次。 工作请求每15分钟运行一次,持续大约一小时。然后,PeriodicWorkRequest停止工作。在8小时内根本没有安排后台工作。我还没有杀死我的应用程序,它在后台。
当我将应用程序带回前台时,PeriodicWorkRequest再次运行后台任务。在我将应用程序置于后台后,具有类似经验的用户将不会重复。
我已禁用应用程序的电池优化。
这是“我的工人”课程示例。
class TestWorker extends Worker {
public TestWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Result doWork() {
// Adding timestamp of background execution to firestore.
Map<String, String> value = new TreeMap<>();
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
String dateFormat = df.format(Calendar.getInstance().getTime());
value.put("time", dateFormat);
FirebaseFirestore.getInstance()
.collection("my-collection")
.add(value);
return Result.SUCCESS;
}
}
这就是我所说的:
PeriodicWorkRequest.Builder testBuilder =
new PeriodicWorkRequest.Builder(TestWorker.class, 15,
TimeUnit.MINUTES);
PeriodicWorkRequest testWork = testBuilder.build();
WorkManager.getInstance().enqueue(testWork);
答案 0 :(得分:0)
您可以从下面的独特定期工作开始
WorkManager.getInstance().enqueueUniquePeriodicWork(UNIQUE_ID, ExistingPeriodicWorkPolicy.REPLACE, testWork);
在这里, UNIQUE_ID
是字符串,它将检查您的工作人员的唯一性,如果已经存在于定期工作队列中,则将其替换。 >
签出工作人员政策 here 。
不要忘记将相同的标签添加到您的工作程序实例中,例如:
PeriodicWorkRequest.Builder testBuilder =
new PeriodicWorkRequest.Builder(TestWorker.class, 15, TimeUnit.MINUTES);
PeriodicWorkRequest testWork = testBuilder.addTag(UNIQUE_ID).build(); // Set the same string tag for worker.
答案 1 :(得分:0)
我最近与PeriodicWorkRequest一起工作,并且知道Workmanager在 android.arch 中仍处于Alpha / Beta模式,并且存在一些尚待修复的错误。然后,我浏览了有关androidX(this)的文档,该文档发布了稳定版本,并且可以按预期正常运行。主要的问题是,您必须将项目迁移到AndroidX。
简单来说, 如果您使用“ android.arch.work:work-runtime:1.x.x” ,则不能保证目前可以正常工作(直到我们有一个稳定的版本)。尝试使用“ androidx.work:工作运行时” ,它肯定会工作。
注意::
如果要将项目迁移到AndroidX。请按照以下步骤操作,
Android Studio(v3.4.1)工具栏->重构->迁移到AndroidX