Android Work Manager:如何每月一次入队

Android Work Manager:如何每月一次入队,第1张

概述在thisquestion之后,我研究了AndroidJobScheduling,如果我想每月进行一次 *** 作,似乎WorkManager是最新的工具.我建立了一个Worker类并在我的活动中使用以下代码片段激活了它:PeriodicWorkRequestmyWorkRequest=newPeriodicWorkRequest.Builder(MonthlyWork

在this question之后,我研究了AndroID Job Scheduling,如果我想每月进行一次 *** 作,似乎Work Manager是最新的工具.我建立了一个Worker类并在我的活动中使用以下代码片段激活了它:

PeriodicWorkRequest myWorkRequest =                new PeriodicWorkRequest.Builder(MonthlyWorker.class, 20, TimeUnit.MINUTES)                        .build();WorkManager.getInstance().enqueueUniquePeriodicWork("my fancy test",ExistingPeriodicWorkPolicy.KEEP, myWorkRequest);

虽然我成功测试了20分钟的时间,但是有一个问题:没有几个月可用的TimeUnit,只有几天.由于显而易见的原因,每30天执行一次工作将无法正常工作,因为我需要在每月的第一天执行任务.所以我该怎么做?我必须使用其他API吗?谢谢.

我可以做类似if(dayOfMonth == 1)做Function的事情,但是我认为这破坏了调度程序的目的.

解决方法:

您可以自己按分钟进行 *** 作:

只需将天转换为分钟:

这里:30天= 43200分钟= 1个月

PeriodicWorkRequest myWorkRequest =            new PeriodicWorkRequest.Builder(MonthlyWorker.class, 43200, TimeUnit.MINUTES)                    .build();WorkManager.getInstance().enqueueUniquePeriodicWork("my fancy test",ExistingPeriodicWorkPolicy.KEEP, myWorkRequest);

更新:

根据我的要求,我想在上午8点至下午6点之间每30分钟执行一次任务

在您需要的那个工人的帮助下,我为您提供了每月1月1日至凌晨2点之间的服务:

public class TestWorker extends Worker {    private static final String DEFAulT_START_TIME = "00:01"; //12:01 am    private static final String DEFAulT_END_TIME = "03:00"; // 03:00 am    private static final String TAG = "TestWorker";    public TestWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {        super(context, workerParams);    }    @NonNull    @OverrIDe    public Result doWork() {        /**         * Its for time         */        DateFormat dateFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());        /**         * Get Current Calendar Instance         */        Calendar c = Calendar.getInstance();        // Get current day of month        int day = c.get(Calendar.DAY_OF_MONTH);        /**         * Get current time and compare with our start and end date.         */        Date date = c.getTime();        String formattedDate = dateFormat.format(date);        try {            Date currentDate = dateFormat.parse(formattedDate);            Date startDate = dateFormat.parse(DEFAulT_START_TIME);            Date endDate = dateFormat.parse(DEFAulT_END_TIME);            /**             * This condition will check that day is 1, and time interval in between give time.             */                     if (day == 1 && currentDate.after(startDate) && currentDate.before(endDate)) {                // Do your work here            }        } catch (ParseException ignored) {        }        return Result.success();    }}

您可以在X个小时的间隔内开始此测试工作,以便每隔X个小时检查一次(例如,根据您的情况,您可以给2个小时,因此每两小时检查一次)

我不知道它是否会影响性能,但是我认为没有其他解决方案.

您可以按以下方式启动工作程序:

PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 2, TimeUnit.HOURS)                .addTag("MYWORK")                .build();WorkManager.getInstance().enqueueUniquePeriodicWork("MYWORK", ExistingPeriodicWorkPolicy.REPLACE, periodicWork);

希望它会有所帮助.

总结

以上是内存溢出为你收集整理的Android Work Manager:如何每月一次入队全部内容,希望文章能够帮你解决Android Work Manager:如何每月一次入队所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1093743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存