WorkManager不重复PeriodicWorkRequest

Mad*_*rma 3 android miui android-workmanager

我正在创建一个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);
Run Code Online (Sandbox Code Playgroud)

ClassExtendingWorker:

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

Abh*_*Das 10

根据文档:

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

如果您设置的这两个值小于指定的 min,则您必须等待大约 20 分钟才能查看日志/输出


Syl*_*Yao 7

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

  • 这是不正确的!这将线性重试,例如,第一次在 1 分钟后,第二次在 3 分钟后,第三次在 6 分钟后......所以没有所需的清晰间距 (2认同)

Vir*_*tel 5

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

另外,请参考此PeriodicWorkRequest GitHub演示并根据中的要求更新TimeUnit DayIncrementViewModel.java。它将根据您的需要工作。

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

  • @shakunthalaMK PeriodicWorkRequest的默认时间为15分钟。因此,在15分钟以下,它将无法正常工作。此外,它不会在15分钟后准确触发,但会在15分钟左右执行。如果要每10分钟或在任何特定时间执行任何任务,则必须改用Alarm Manager。 (2认同)