延迟动作和BroadcastReceiver

时间:2011-07-11 12:14:40

标签: android service timer broadcastreceiver timertask

我有一个案例,我必须在电源连接到设备后N秒启动一些非UI操作 N秒。该操作也可以由用户通过UI启动。

我在 AndroidManifest.xml 中定义了一个BroadcastReceiver,它侦听 ACTION_POWER_CONNECTED

我有一项服务需要对 onStartCommand 采取必要的措施。我的问题是 - 在广播触发行动的时候,启动该服务的正确方法是什么?

我有两个选择:

  1. 一次性计时器任务。但是我认为这可能是错误的,因为根据文档,我无法从BroadcastReceiver启动任何异步任务。

  2. 重新设计服务:

    • 如果操作由用户
    • 触发,则在 onStartCommand 处开始操作
    • 启动计时器任务并在计时器拍摄时执行操作 - 与1中的逻辑相同但在服务范围内 - 如果操作是由广播触发的。
  3. 我倾向于2.它会使代码变得更复杂,但它似乎只是正确的方式。

    -Lev

1 个答案:

答案 0 :(得分:1)

正确的方法是#2。那是因为一旦你离开onReceive申请流程就可能会被杀死。在这种情况下,TimerTask无效。

作为替代解决方案,使用AlarmManager及其set函数来安排待处理的服务意图。这可能是您案例中最好的解决方案。