Android 工作管理器类在执行doWork()方法时遇到问题

Android 工作管理器类在执行doWork()方法时遇到问题,android,scheduled-tasks,android-workmanager,periodic-task,workmanagertaskexecutor,Android,Scheduled Tasks,Android Workmanager,Periodic Task,Workmanagertaskexecutor,首先让我更正一下: 工作管理器:可以定义的最小重复间隔为15分钟(与JobScheduler API相同)。 如果这不正确,请让我知道 我创建了以下类,用于执行定期工作请求: object WorkManagerUtils { fun syncWorkManager() { val myConstraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED)

首先让我更正一下:

工作管理器:可以定义的最小重复间隔为15分钟(与JobScheduler API相同)。 如果这不正确,请让我知道

我创建了以下类,用于执行定期工作请求:

object WorkManagerUtils {

fun syncWorkManager() {
    val myConstraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

    val syncRequest = PeriodicWorkRequest
            .Builder(MyWorker::class.java, 20000, TimeUnit.MILLISECONDS)
            .setConstraints(myConstraints)
            .build()

    WorkManager
            .getInstance()
            .enqueueUniquePeriodicWork(
                    Constants.WORKER,
                    ExistingPeriodicWorkPolicy.KEEP,
                    syncRequest)
   }
}
下面是我的工人班。请检查:

class MyWorker(val context: Context, param: WorkerParameters) : Worker(context, param) {
override fun doWork(): Result {
    if (isNetworkAvailable(context)) {
        callSyncApi()
    } else {
        WorkManagerUtils.syncWorkManager()
    }
    return Result.success()
}

private fun callSyncApi() {
        ToastUtils.shortToast(0,"This is working")
   }
 }
在我的活动中调用此项,如下所示:

WorkManagerUtils.syncWorkManager()
你可以注意到,目前我只是展示吐司作为我的工作。我想检查一下这是否有效


但是吐司没有显示。

任何低于15分钟的间隔都将被15分钟所取代

假设您的
ToastUtils.showtoats(…)
工作正常,我相信工作经理选择了15分钟的间隔,并且“保留”现有工作策略阻止了重新安排和测试

我建议在测试时将现有的工作策略更改为“替换”

来自work manager 1.0.0来源:

public final class PeriodicWorkRequest extends WorkRequest {
    ...
    public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes
    ...
}

public class WorkSpec {
    ...
    public void setPeriodic(long intervalDuration) {
        if (intervalDuration < MIN_PERIODIC_INTERVAL_MILLIS) {
            ...
            IntervalDuration = MIN_PERIODIC_INTERVAL_MILLIS;
        }
    }
    ...
}
公共最终类PeriodicWorkRequest扩展了WorkRequest{
...
公共静态最终长分钟周期间隔=15*60*1000L;//15分钟
...
}
公共类工作规范{
...
公共无效设置周期(长间隔){
if(间隔时间

setPeriodic
函数重载,应用相同的间隔强制。

您好,我必须每10秒调用一次web服务,使用Work manager和Job Scheduler是不可能的,因为它们的最小间隔是15分钟。什么是相同的替代方案?您唯一的选择是使用alarm manager和前台服务来保持您的应用程序处于活动状态-请记住,如果您的应用程序被关闭(存在邪恶的电池优化程序),您需要重新安排。是的,我想是这样,请您提供示例演示链接。我正在从我身边寻找它。谢谢,安卓开发者: