Android 服务实现模式

Android 服务实现模式,android,web-services,service,Android,Web Services,Service,好的,我有一个需要定期更新web服务的应用程序,我做了大量的研究,提出了两种服务实现模式 使用线程实现服务,周期性更新时间可能会有所不同,因此,我将按照所需的时间间隔使线程休眠,然后再次调用web服务。我还需要更新活动,因此将使用广播接收器或信使 使用带有时间表计时器/报警管理器的服务,唤醒系统,并使用与广播接收器耦合的意向服务 哪种方法最好 主要区别在于,用户可以关闭后台服务,然后您将无法获得更多更新。如果向AlarmManager注册事件,则可以控制这些事件何时/是否发生。如果用户关闭你的应

好的,我有一个需要定期更新web服务的应用程序,我做了大量的研究,提出了两种服务实现模式

  • 使用线程实现服务,周期性更新时间可能会有所不同,因此,我将按照所需的时间间隔使线程休眠,然后再次调用web服务。我还需要更新活动,因此将使用广播接收器或信使

  • 使用带有时间表计时器/报警管理器的服务,唤醒系统,并使用与广播接收器耦合的意向服务


  • 哪种方法最好

    主要区别在于,用户可以关闭后台服务,然后您将无法获得更多更新。如果向AlarmManager注册事件,则可以控制这些事件何时/是否发生。如果用户关闭你的应用程序并进入任务管理器并关闭与你的应用程序相关的任何正在运行的服务,AlarmManager仍将唤醒并发送一条你的广播接收器将收到的消息。

    我想我会选择#2选项:

  • 创建一个
    IntentService
    来执行更新
  • IntentFilter
    (s)注册
    BroadcastReceiver
    ,并从中启动
    IntentService
  • 使用
    AlarmManager
    以所需的时间间隔播放注册的操作
  • 我更喜欢这种方法,因为:

  • 这是一种非常灵活的模式:您可以随时启动服务,方法是注册同一个接收器,以执行不同的操作,如网络连接更改、系统引导更改等
  • 它使逻辑与应用程序的其他部分松散耦合
  • 没有管理线程的麻烦。您可以使用
    IntentService
  • 这是解决这个问题的一种更为简单的方法

  • 在更高版本的Android(v3+)上,严格来说并非如此。如果用户使用应用程序管理器中的强制停止来停止应用程序,则在用户再次手动启动应用程序之前,不会激活任何应用程序组件。我可能错了,但据我所知,即使是在清单中注册的接收者也不会被调用。那么您建议使用哪种方法呢?如果以上都没有,你有更好的方法来实现它吗?@Hades:我不确定你的评论是针对我还是Rich的。不管怎么说,Rich基本上是正确的,尽管正如我所提到的,如果更高版本的Android用户手动停止应用程序,那么在他们再次手动启动应用程序之前,一切都不会再次工作。这是任何方法都无法避免的。然而,500865的答案是我将采用的方法,并且我确实使用类似的模型来每日下载用户数据。