Android Oreo工作经理PeriodicWork无法正常工作

时间:2018-11-13 09:09:05

标签: android android-workmanager

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);

2 个答案:

答案 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:工作运行时” ,它肯定会工作。

浏览文档以获取更多参考。 this this

注意::

如果要将项目迁移到AndroidX。请按照以下步骤操作,

Android Studio(v3.4.1)工具栏->重构->迁移到AndroidX