Workmanager 的预定作业未在特定时间启动

问题描述 投票:0回答:0

我开发了一个应用程序,其主要目的是使用 zxing 库读取一些 QR 码。 这很好用。

我的问题来自 workmanager 和预定的工作。我有一个班级,在那里我开始与工作经理一起工作,该工作应该在早上 8 点每 24 小时开始一次。稳定开始时间的代码来自此链接https://stackoverflow.com/questions/50363541/schedule-a-work-on-a-specific-time-with-workmanager

long delay;
        int SELF_REMINDER_HOUR = 8;
        if (DateTime.now().getHourOfDay() < SELF_REMINDER_HOUR) {
            delay = new Duration(DateTime.now(), DateTime.now().withTimeAtStartOfDay().plusHours(SELF_REMINDER_HOUR)).getStandardMinutes();
        } else {
            delay = new Duration(DateTime.now(), DateTime.now().withTimeAtStartOfDay().plusDays(1).plusHours(SELF_REMINDER_HOUR)).getStandardMinutes();
        }
        long minPeriodicFlexMillis = PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS;//5 minutos
        long minPeriodicIntervalMillis = PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS;//15 minutos

        //Establecemos las condiciones de ejecución de la tarea programada. En este caso que haya conexión.
        Constraints condiciones = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
        PeriodicWorkRequest peticionPeriodica = new PeriodicWorkRequest.Builder(ComprobarRonda.class, 24, TimeUnit.HOURS, PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, TimeUnit.MILLISECONDS)
                .addTag("TareaPeriodica_hora")
                .setConstraints(condiciones)
                .setInitialDelay(delay, TimeUnit.MINUTES)//para que se ejecute siempre a las 8 de la mañana
                .build();

        WorkManager workManager = WorkManager.getInstance(application);
        workManager.enqueueUniquePeriodicWork("comprobarRonda", ExistingPeriodicWorkPolicy.KEEP, peticionPeriodica);

ComprobarRonda 类扩展了 Worker 类,重写的 doWork 方法读取存储在领域数据库中的二维码并通过电子邮件发送。

首先,我禁用了我的应用程序的电池优化并启用了自动启动,以便即使在手机锁定的情况下也可以启动工作。

在将应用程序投入生产之前,我以 15 分钟为周期并且没有延迟地测试了时间表。起初它工作正常但在很多情况下频率大于 15 分钟,但它工作。

但是,当我以24小时为周期启动它时,它没有用,并且没有发送电子邮件。

项目使用的手机是alcatel 1,非常基础。

android scheduled-tasks android-workmanager
© www.soinside.com 2019 - 2024. All rights reserved.