在特定时间停止服务
Posted
技术标签:
【中文标题】在特定时间停止服务【英文标题】:Stop a service at specific time 【发布时间】:2013-05-10 09:44:48 【问题描述】:我正在重复使用以下代码开始我的服务。我的服务每天早上 8 点开始。并且 AlarmManager 每 1 分钟重复一次。我想在下午 6 点停止这项服务。我该怎么做?
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
PendingIntent loggerIntent = PendingIntent.getBroadcast(this, 0,new Intent(this,AlarmReceiver.class), 0);
Calendar timeOff9 = Calendar.getInstance();
timeOff9.set(Calendar.HOUR_OF_DAY, 08);
timeOff9.set(Calendar.MINUTE, 00);
timeOff9.set(Calendar.SECOND, 00);
//--------------------------------------------------------------------------------------------------------------------
long duration = userinterval * 60 * 1000;
manager.setRepeating(AlarmManager.RTC_WAKEUP,timeOff9.getTimeInMillis(), duration, loggerIntent);
【问题讨论】:
How to cancel this repeating alarm? 的可能重复项 【参考方案1】:为了在下午 6 点准确取消,我会考虑 2 个选项:
-
每次触发警报(即每 1 分钟),检查时间,如果时间在下午 6 点之后,则取消。
在 AlarmManager 中设置一次性警报,以准确在下午 6 点响起。在那个闹钟中,取消。
出于简单性和每个代码块的模块化,我更喜欢选项 2。所以对我来说,我会在我的概念验证代码中使用 (2),同时研究解决方案。
但从资源的角度来看,选项 1 更好,因为 android 系统只需要记住一个警报。我会在我的最终生产代码中使用 (1)。
这种工作方式只是我个人的偏好,大多数人可能会说从一开始就使用 (1)。
关于取消的详情如下...
至于如何取消闹钟,@commonsware 的回答你不会经常被击败......
以下答案复制自How to cancel this repeating alarm?
在AlarmManager
上调用cancel()
,并使用与setRepeating()
相同的PendingIntent
:
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this,
0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(sender);
【讨论】:
这段代码应该在我开始 AlarmManagr 的活动中。对吗?但是如何在下午 6 点准确取消。 我已经更新了答案,提供了 2 种常用方法来了解何时取消。 我从来没有想过这两种方法中的任何一种。谢谢!以上是关于在特定时间停止服务的主要内容,如果未能解决你的问题,请参考以下文章