Java 如何在应用程序后台每小时运行一次进程,即使未在应用程序中/应用程序已关闭

Java 如何在应用程序后台每小时运行一次进程,即使未在应用程序中/应用程序已关闭,java,android,Java,Android,因此,我正在开发一个简单的应用程序,它接收用户输入的日期和名称,然后提醒你朋友的生日是什么时候。我无法解决的一个问题是如何每天检查今天的生日 我已经尝试过WorkManager和AlarmManager,它们都不会执行所需的代码。所有需要做的就是在java类中执行一个方法,然后构建并发送通知 以下是设置提醒的代码。提醒中的内容无关紧要,只需每天运行一次提醒工人 public void setReminder() { Calendar currentDate = Calen

因此,我正在开发一个简单的应用程序,它接收用户输入的日期和名称,然后提醒你朋友的生日是什么时候。我无法解决的一个问题是如何每天检查今天的生日

我已经尝试过WorkManager和AlarmManager,它们都不会执行所需的代码。所有需要做的就是在java类中执行一个方法,然后构建并发送通知

以下是设置提醒的代码。提醒中的内容无关紧要,只需每天运行一次提醒工人

    public void setReminder() {
        Calendar currentDate = Calendar.getInstance();
        Calendar dueDate = Calendar.getInstance();
        dueDate.set(Calendar.HOUR_OF_DAY, 0);
        dueDate.set(Calendar.MINUTE, 0);
        dueDate.set(Calendar.SECOND, 0);
        if(currentDate.after(dueDate)) {
            dueDate.add(Calendar.Hour, 24);
        }
        long timeDiff = dueDate.getTimeInMillis() - currentDate.getTimeInMillis();
        Log.d("ReminderTests", "Time until next alarm//alarm set: " + timeDiff);
        OneTimeWorkRequest timedRemindRequest = new OneTimeWorkRequest.Builder(RemindWorker.class)
                .addTag("CALENDAR_BASED_PERIODIC")
                .setInitialDelay(timeDiff, TimeUnit.MILLISECONDS)
                .build();
        WorkManager.getInstance().enqueueUniqueWork("REMIND_WORK", ExistingWorkPolicy.REPLACE, timedRemindRequest);
    }
}
这是在应用程序打开时首次调用的。在RemindWorkr类的末尾,setReminder();再次调用,开始循环


当手机打开并插入电脑(以及应用程序打开)时,提醒工作人员将完美启动并提醒用户。一旦应用程序退出(甚至没有清除,只是我打开了另一个应用程序),什么都没有发生。不会触发任何提醒。

阅读我做过的android服务,据我所知,这些服务只能运行一次。如何循环它们?这是服务中的代码。使用jaav线程池或其中的timer()调度任务从后台与UI交互threads@tgkprog非常感谢你的帮助。我能够使用重复的TimerTask来运行和循环服务,该TimerTask在每次WorkManager完成后都会重新启动。我现在唯一的问题是,如果我关闭应用程序(向上滑动以清除),一切都会停止。然而,Instagram等应用程序将继续发送通知,即使我要清除它们。我怎样才能确保即使应用程序被关闭,计时器也不会停止?阅读关于android服务的文章,据我所知,这些服务只能运行一次。如何循环它们?这是服务中的代码。使用jaav线程池或其中的timer()调度任务从后台与UI交互threads@tgkprog非常感谢你的帮助。我能够使用重复的TimerTask来运行和循环服务,该TimerTask在每次WorkManager完成后都会重新启动。我现在唯一的问题是,如果我关闭应用程序(向上滑动以清除),一切都会停止。然而,Instagram等应用程序将继续发送通知,即使我要清除它们。如何确保即使应用程序被关闭,计时器也不会停止?