12

我正在创建一个 android 应用程序来在后台运行我的代码。我很清楚 Android Oreo 对后台服务引入的限制,这就是为什么我使用 WorkManager API 来安排执行任务的原因。我正在使用 Android API 24 (Nougat) 在 Mi Max 设备上测试我的代码,并手动启用自动启动,以便 MIUI 允许应用程序在后台运行,但问题是,WorkManager 在应用程序第一次启动时触发但是之后,它不起作用。下面是我用于定期工作请求和工作本身的代码。

PeriodicWorkRequest 调用:

PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(ClassExtendingWorker.class, 15, TimeUnit.MINUTES)
            .setConstraints(Constraints.NONE)
            .build();
WorkManager.getInstance().enqueue(work);

类ExtendingWorker:

public Result doWork() {
    /*--- SHOWING NOTIFICATION AS AN EXAMPLE TASK TO BE EXECUTED ---*/
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), "")
            .setSmallIcon(R.drawable.common_google_signin_btn_icon_light)
            .setContentTitle("TestApp")
            .setContentText("Code executed")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
    notificationManager.notify(1234, mBuilder.build());

    return Result.SUCCESS;
}
4

4 回答 4

14

根据文档:

 /**
 * The minimum interval duration for {@link PeriodicWorkRequest} (in milliseconds).
 */
public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes.
/**
 * The minimum flex duration for {@link PeriodicWorkRequest} (in milliseconds).
 */
public static final long MIN_PERIODIC_FLEX_MILLIS = 5 * 60 * 1000L; // 5 minutes.

如果您将这两个值设置为小于指定的最小值,那么您必须等待大约 20 分钟才能看到日志/输出

于 2019-04-26T12:41:21.253 回答
9

如果您使用间隔小于 15 分钟的 PeriodicWorkRequest,您应该返回Result.retry(),而不是成功或失败。

于 2019-07-07T14:16:53.387 回答
5

将您的 WorkManager 版本更新为1.0.0-alpha04您可以在此处查看发行说明

此外,请参阅此PeriodicWorkRequest GitHub 演示并根据您在DayIncrementViewModel.java. 它将根据您的需要工作。

WorkManager 仍处于 alpha 模式,因此一旦发布最终版本,它将完全适用于所有设备。

于 2018-07-02T12:05:24.263 回答
2

将弹性间隔和弹性单元添加到构建器构造函数。就我而言,这已经开始起作用了。

PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(ClassExtendingWorker.class, 15, TimeUnit.MINUTES, 5, TimeUnit.MINUTES)
于 2018-08-19T21:34:12.147 回答