在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:如何每月一次入队所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)