gpt4 book ai didi

java - AlarmManager 在第二个间隔完成之前触发

转载 作者:行者123 更新时间:2023-12-01 18:11:55 27 4
gpt4 key购买 nike

我编写了一个每天凌晨 5:22 运行的闹钟代码。该代码在第一个时间间隔内运行良好,但在第二个时间间隔内会在 24 小时之前触发。

我在 MainActivity 的 onCreate() 方法中添加了警报代码,该代码在第一个时间间隔内运行完美,但在第一个时间间隔之后,如果我打开 MainActivity,警报会再次触发并继续运行当我打开 MainActivity 时触发。例如,如果我打开 MainActivity 两次,则警报会触发两次。

我在这里还提到了一些解决方案,但它们的工作原理并不像 marmor's answer .

我还尝试检查是否使用 FLAG_NO_CREATE 标志设置了警报,但仍然不起作用。

下面是我的代码。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, ServiceReceiver.class);

PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 11111, intent, 0);

Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();

calSet.set(Calendar.HOUR_OF_DAY, 5);
calSet.set(Calendar.MINUTE, 11);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);

if(calSet.compareTo(calNow) <= 0){
//Today Set time passed, count to tomorrow
calSet.add(Calendar.DATE, 1);
}

alarmMgr.cancel(alarmIntent);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent); //1000 * 60 * 1440

}

我正在将服务运行的时间记录到文本文件中。

编辑:

目标sdk版本为22

根据 kolombo 的建议,我检查了日期并检查了我的 if 语句是否被执行。执行 if 语句,我得到明天同一时间的日期。

我正在使用 Moto E 来开发应用程序。

我已经上传了项目文件here在 Google 云端硬盘上。

最佳答案

您需要从服务上的 onStartCommand 函数返回START_NOT_STICKY。或者您必须在作业完成后停止它。或者您可以使用 IntentService 而不是 Service。闹钟工作正常。

public int onStartCommand(Intent intent, int flags, int startId){
try{
commitToFile("Start");
}catch (Exception e){}
try{
commitToFile("End");
}catch (Exception e){}
return START_NOT_STICKY;
}

您返回了 0,即 START_STICKY_COMPATIBILITY。当您的警报第一次触发时,您的服务启动并运行。当您重新启动应用程序时,您的服务也会重新启动,因为您没有停止它。如果您返回 START_NOT_STICKY - 服务将不会重新启动。或者,如果您使用 IntentService,该服务会自动完成这项工作并自行完成。

关于java - AlarmManager 在第二个间隔完成之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com