1

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

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

我有一项服务需要对onStartCommand采取行动。我的问题是 - 如果广播触发操作,启动该服务的正确方法是什么?

我有两个选择:

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

  2. 重新设计服务:

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

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

-列夫

4

1 回答 1

1

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

作为替代解决方案,使用AlarmManager及其set功能来安排待处理的服务意图。在您的情况下,这可能是最好的解决方案。

于 2011-07-11T12:39:16.400 回答