【问题标题】:Delayed actions and BroadcastReceiver延迟动作和广播接收器
【发布时间】:2011-07-11 20:39:16
【问题描述】:

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

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

我有一项服务需要对 onStartCommand 执行操作。我的问题是 - 在广播触发动作的情况下,启动该服务的正确方法是什么?

我有两个选择:

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

  2. 重新设计服务:

    • 如果操作是由用户触发的,则在 onStartCommand 处开始操作
    • 启动计时器任务并在计时器触发时执行操作 - 与 1 中的逻辑相同。但在服务内部 - 如果操作是由广播触发的。

我倾向于2。它会使代码更复杂一些,但似乎这是唯一正确的方法。

-Lev

【问题讨论】:

    标签: android service timer broadcastreceiver timertask


    【解决方案1】:

    正确的方法是#2。那是因为一旦你离开onReceive 应用程序进程可能会被杀死。在这种情况下,您的 TimerTask 将无济于事。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2011-12-14
      • 2012-06-07
      相关资源
      最近更新 更多