2012-09-26 196 views
0

好的我有这个应用程序需要定期更新到网络服务,我做了大量的研究,并且提出了两种服务实现模式。服务实施模式

  1. 实现与线程服务,定期更新的时间可能有所不同,因此,我会把线程与所需的时间间隔睡觉,然后再调用Web服务。我还需要更新活动,因此将使用广播接收器或信使。

  2. 使用带时间表定时器/闹钟管理器的服务,唤醒系统并使用与广播接收器连接的意向服务。

这将是最好的方法?

回答

2

我想我会与#2选项去:

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

我喜欢这种方法,因为:

  1. 这是一个非常灵活的模式:你可以通过注册相同的接收器像网络连接的变化,系统引导方面的变化等不同的动作随时启动该服务,
  2. 它保持逻辑从应用程序的其他部分松散耦合。
  3. 没有管理线程的麻烦。你可以免费获得它通过使用IntentService
  4. 这是更多的解决这个问题的android-ish方式。
0

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

+0

在更高版本的Android(v3 +)上不完全适用。如果用户使用应用程序管理器的强制停止来停止应用程序,那么在用户再次手动启动应用程序之前,不会激活任何应用程序组件。我可能是错的,但据我了解,即使在清单中注册的接收者也不会被调用。 – Squonk

+0

那么你会推荐哪种方法?如果以上都不是,你有更好的实施方法吗? – Hades

+0

@Hades:我不确定你的评论是针对我还是Rich。无论如何,为了回答它,Rich基本上是正确的,尽管如前所述,如果以后Android版本的用户手动停止应用程序,那么直到他们再次手动启动它,情况才会再次起作用。任何方法都无法避免。然而,从500865的答案是我会采取的方法,并且我使用类似的模型来每日下载用户数据。 – Squonk