当前位置: 首页 > 知识库问答 >
问题:

是否有更简单的方法来使用AlarmManager或设置基于实时的警报?

柴浩大
2023-03-14

似乎根据实际经过的时间(与设备Hibernate时停止的正常运行时间相反)来对操作进行计时的唯一方法是AlarmManager。

是否有一种简单的方法来实现基于“壁钟”的延迟执行,例如通过一个围绕AlarmManager的开源包装器?

对于正常的计时操作,您可以使用一个处理程序,这就像这样一个简单的任务应该有的那样容易:

  • 实现处理程序回调(无需注册)
  • 实例化处理程序
  • 调用sendEmptyMessageDelayed或类似函数
  • 要清除所有设置的延迟,只需调用removecallbacksandmessages(null)

但是,Handler只支持基于正常运行时间的延迟,这有时是不够的(例如,如果您希望每15分钟检查一次服务器是否有新消息)。

  • 为警报定义操作
  • 创建接收器(通过创建专用接收器类并将其声明为清单,或者实现接口,使用registerReciever注册接收器,并在完成后取消注册)
  • 为您的操作创建意图
  • 将所述意图包装在挂起的意图中,如果要取消警报,则存储挂起的意图
  • 获取警报管理器(这需要上下文)
  • 设置闹钟
  • 当要取消警报时,请使用存储的PendingIntent取消警报
  • 如果您决定使用多个意图或意图更改数据,则必须将它们全部保存,以便之后清理警报管理器

共有1个答案

宗政文彬
2023-03-14

对于正常的计时操作,可以使用处理程序

仅来自前台活动。对处理程序进行长期轮询的任何其他使用充其量都是不可靠的,甚至忽略了您对正常运行时间计算的担忧。

为闹钟定义一个动作

这没必要。这甚至不是一个好主意。

创建一个接收器(通过创建一个专用的接收器类并将其声明为清单,或者实现接口,使用registerReciever注册接收器,并在完成后取消注册)

如果希望事件在您不在前台时发生,并且警报在设备处于Hibernate状态时发出(_wakeup报警),则需要清单注册的接收器。如果不需要_wakeup,服务就足够了。如果您只需要在前台并在活动中接收事件,则使用createPendingResult()为您提供一个pendingIntent,它将触发活动的onActivityResult()。但是,在后一种情况下,在视图处理程序上使用postdelay()会更有意义。

如果要取消警报,则存储挂起的意图

如果存储pendingintent是一个选项,那么handler就是您所需要的,而AlarmManager是不合适的。要取消警报,需要等效的pendingintent(其中基础的intent对象根据filterequals()匹配,并且pendingintent操作[activity,service,broadcast]相同)。

当您想要取消警报时,使用存储的pendingIntent取消它

不,可以通过创建等效的PendingIntent来取消它。

如果您决定有多个意图或意图更改数据,您将不得不保存它们,以便之后清理警报管理器

不,可以通过创建等效的PendingIntent来取消它们。

或者,使用ScheduledExecutorServiceWakelock来处理短期事务。这不适合“每15分钟一次”的情况,因为它使设备一直处于清醒状态。

 类似资料:
  • 我试过很多次了,但什么也没有。 这是类的代码,它应该设置警报,但在指定的时间和日期没有发生任何事情。

  • 我想取消所有设置的警报。。。。。我已经搜索了很多,尝试了很多东西,但都没有成功。。。当我将闹钟设置为2分钟后,然后取消它时,2分钟后它仍会启动。。。。。任何帮助都将不胜感激。 创建警报的方法: 这是为了取消报警:

  • 我有一个应用程序,在指定的时间设置警报与TimePicker(24小时模式)。 我注意到,如果时间是23:00,而您将报警设置为01:00,AlarmManager会将其解释为已过日期。目前,我设置的警报如下所示: 正如你所看到的,该应用程序计算时差,如果时差为负值,则设置第二天的警报。这就产生了上面描述的bug。如何修复它? 当做 马库斯

  • 本文向大家介绍C++设置超时时间的简单实现方法,包括了C++设置超时时间的简单实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++设置超时时间的简单实现方法,代码简单易懂,功能实用。分享给大家供大家参考。具体实现方法如下: 此处setsockopt为针对套接口的操作,感兴趣的朋友可以查阅相关资料做进一步了解。 希望本文所述对大家的C++程序设计有所帮助。

  • 问题内容: 我的问题是关于如何从多个(或分片的)tfrecords获取批处理输入。我已经阅读了示例https://github.com/tensorflow/models/blob/master/inception/inception/image_processing.py#L410。基本的管道,把培训作为集为例,(1)首先产生一系列tfrecords(例如,,,…),从这些文件名(2),生成一个

  • 本文向大家介绍js简单设置与使用cookie的方法,包括了js简单设置与使用cookie的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js简单设置与使用cookie的方法。分享给大家供大家参考,具体如下: 一、js设置cookie的用处 php可以设置cookie的,用js来设置cookie有什么好处呢?在前端进行操作时,有的时候要传很多参数,这个时候,我们可以把这些参数拼接到ur