【问题标题】:service implementation pattern服务实现模式
【发布时间】:2012-09-27 04:35:18
【问题描述】:

好的,我有一个需要定期向网络服务发送更新的应用程序,我进行了大量研究,并提出了两种服务实现模式。

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

  2. 使用带有调度计时器/警报管理器的服务,唤醒系统并使用与广播接收器耦合的意图服务。

哪种方法最好?

【问题讨论】:

    标签: android web-services service


    【解决方案1】:

    我想我会选择 #2 选项:

    1. 创建IntentService 进行更新。
    2. IntentFilter(s) 注册一个BroadcastReceiver 并从中启动IntentService
    3. 以所需的时间间隔使用AlarmManagerBroadcast 注册的操作。

    我更喜欢这种方法,因为:

    1. 这是一种非常灵活的模式:您可以通过为不同的操作注册相同的接收器来随时启动服务,例如网络连接更改、系统启动更改等,
    2. 它使逻辑与应用程序的其他部分保持松散耦合。
    3. 管理线程没有麻烦。您可以使用IntentService免费获得它
    4. 这是解决此问题的更类似于 android 的方式。

    【讨论】:

      【解决方案2】:

      主要区别在于用户可以关闭后台服务,然后您将不再获得任何更新。如果您使用 AlarmManager 注册事件,那么您可以控制这些事件何时/是否发生。如果用户关闭您的应用并进入任务管理器并关闭与您的应用相关的所有正在运行的服务,AlarmManager 仍会唤醒并发送您的 BroadcastReceiver 将接收的消息。

      【讨论】:

      • 在更高版本的 Android (v3+) 上并非严格如此。如果用户使用应用程序管理器中的强制停止来停止应用程序,则在用户再次手动启动应用程序之前,不会激活任何应用程序组件。我可能错了,但据我了解,即使在清单中注册的接收者也不会被调用。
      • 那么您会推荐哪种方法?如果以上都不是,你有更好的实现方法吗?
      • @Hades :我不确定您的评论是针对我还是 Rich。无论如何要回答这个问题,Rich 基本上是正确的,尽管正如我所提到的,如果更高版本的 Android 用户手动停止该应用程序,那么在他们再次手动启动它之前,事情将无法再次工作。这是任何方法都无法避免的。然而,来自 500865 的答案是我会采用的方法,并且我确实使用类似的模型来下载用户数据。
      猜你喜欢
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多