Android Oreo workmanager PeriodicWork 不工作

Ash*_*nge 7 android android-workmanager

安卓版本:8.1.0

设备:Infinix X604B

工作管理器:1.0.0-alpha11(最新版本)

安排一个 PeriodicWorkRequest 在每 15 分钟后运行一次。工作请求每 15 分钟运行一次,持续大约一小时。然后 PeriodicWorkRequest 停止工作。在 8 小时内,根本没有安排后台工作。我没有杀死我的应用程序,它在后台。

当我将应用程序带回前台时,PeriodicWorkRequest 再次运行后台任务。在我将我的应用程序置于后台后,没有重复的类似经验。

我为我的应用禁用了电池优化。

这是 My Worker 类示例。

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;
}
Run Code Online (Sandbox Code Playgroud)

}

我是这样称呼它的:

PeriodicWorkRequest.Builder testBuilder =
    new PeriodicWorkRequest.Builder(TestWorker.class, 15,
                                    TimeUnit.MINUTES);

PeriodicWorkRequest testWork = testBuilder.build();
WorkManager.getInstance().enqueue(testWork);
Run Code Online (Sandbox Code Playgroud)

Jee*_*ede 1

您可以从如下独特的定期工作开始,

WorkManager.getInstance().enqueueUniquePeriodicWork(UNIQUE_ID, ExistingPeriodicWorkPolicy.REPLACE, testWork);
Run Code Online (Sandbox Code Playgroud)

这里,UNIQUE_ID一个字符串,它将检查您的工作人员的唯一性,并替换现有的工作人员(如果它已存在于定期工作的队列中)。

请在此处查看工人政策。

并且不要忘记向您的工作实例添加相同的标签,例如:

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.
Run Code Online (Sandbox Code Playgroud)

  • 和我有同样的问题,就像@AshishKhurange一样。我正在做100%相同的事情 (2认同)