似乎根据实际经过的时间(与正常运行时间相反,正常运行时间在设备休眠时停止)为操作计时的唯一方法是 AlarmManager。
是否有一种简单的方法来执行基于“wallclock”的延迟执行,例如通过 AlarmManager 周围的开源包装器?
对于正常的计时操作,您可以使用处理程序,这很简单,因为这样一个简单的任务应该是:
- 实现处理程序回调(无需注册)
- 实例化一个处理程序
- 调用 sendEmptyMessageDelayed 或类似函数
- 要清除所有设置的延迟,只需调用
removeCallbacksAndMessages(null)
但是,Handler 仅支持基于正常运行时间的延迟,这有时是不够的(例如,如果您想每 15 分钟检查一次服务器是否有新消息)。
如果你想要这些,似乎你必须使用AlarmManager,这不是很舒服:
- 为您的警报定义一个动作
- 创建接收器(通过创建专用接收器类并将其声明为清单,或实现接口,使用 registerReciever 注册接收器,并在完成后取消注册)
- 为您的操作创建意图
- 将所述意图包装在待处理的意图中,如果要取消警报,则存储待处理的意图
- 获取警报管理器(这需要上下文)
- 设闹钟
- 当您想取消警报时,请使用存储的 pendingIntent 取消它
- 如果您决定有多个意图或更改数据的意图,则必须将它们全部保存以在之后清理警报管理器