我想在固定时间每12小时推送一次通知(比如,每天上午9点和晚上9点).这是我当前的doWork()代码:

  @NonNull
    @Override
    public Result doWork() {

        database.child("business_users").child(currentUserID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                user = snapshot.getValue(BusinessUser.class);
                if(user.isNotifications()==true)
                {
                    if(user.getRatingsCount() > user.getLastKnownRC())
                    {
                        theDifference = user.getRatingsCount() - user.getLastKnownRC();
                        notification();
                    }
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        Log.i("BackgroundWork" , "notif sent");
        return Result.success();
    }

`

这是作品创作代码:

public void FirstTimeWork ()
     {
         PeriodicWorkRequest myWorkRequest =
                 new PeriodicWorkRequest.Builder(BackgroundWork.class, 12, TimeUnit.HOURS)
                         .setInitialDelay(1, TimeUnit.DAYS)
                         .addTag("notif")
                         .build();
     }

我看到一些人用日历做这件事,但我不明白它是如何工作的.

推荐答案

我找到了一个简单的解决方案,使用日历:

calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 22);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

if (calendar.getTimeInMillis() <= System.currentTimeMillis()) {
    calendar.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH + 1);
}

初始延迟设置如下:

.setInitialDelay(calendar.getTimeInMillis() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)

这似乎很有效.

Java相关问答推荐

@GetMapping和@GetExchange有什么区别?

Jooq隐式地将bigint转换为数字,并且索引不起作用

ActivityCompat.请求收件箱自动拒绝权限

JsonPath在多个线程中返回错误的值

如何从JNI方法正确调用NSOpenPanel以在正确的线程上运行?

如何解释Java中for-each循环中对Iterable的强制转换方法引用?

Spring和可编辑";where";@Query

如何在Java记录中设置BigDecimal类型属性的精度?

如何集成语义发布和BitBucket(Java项目)

如何使用log4j2(Json)记录由";异常引起的所有";?

如何使用路径过渡方法使 node 绕圆旋转?

Groovy/Java:匹配带引号的命令选项

如何在JUNIT测试中覆盖ExecutorService?

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

如果第一位数字和最后一位数字相差超过一位,您将如何获得随机数?

在实例化中指定泛型类型与不指定泛型类型之间的区别

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

为什么我的登录终结点不能被任何请求访问?

Intellij 2023 IDE:始终在顶部显示菜单栏

转换为JSON字符串时,日期按天递减-Java