我刚读过Android Architecture Tutorial: Developing an App with a Background Service (using IPC)。基本上是
我可以看到这种方法有两个主要特征。
但是,如果“始终运行”不是我的要求。当我退出主活动时,我希望一切都停止。
AsyncTask
(或Timer
)来执行推文检索操作会更好吗?一切都将在一个过程中运行。不再使用Service
。Service
方法可能会更好?我错过了服务提供的一些好东西吗?答案 0 :(得分:1)
使用服务是一种更好的方法,因为它允许您独立于应用程序流执行轮询。
由于这是一项不需要用户交互的任务,而且必须在后台完成而不会干扰应用程序的主UI以及用户正在做的任何事情,因此服务是实现它的理想候选者。
可以将服务与应用程序绑定,使得当主应用程序终止时,它也将关闭服务。
答案 1 :(得分:1)
首先,您必须知道服务不是线程。如果一个活动绑定一个服务并作为一个Deamon运行,但ASynchTask是另一个线程。
ASynchTask 用于完成一些不应在UI-Thread上运行的工作(例如处理一些较大的计算)
服务旨在在背景上永久运行。 如果您想要永久检查新推文,即使您的活动已停止或暂停,您也应该使用服务,该服务会检查自己的线程以获取新数据。
TimerTask 是在自己的线程上运行的优秀的旧式java实现。 您可以使用它们来处理某些数据,但是操作UI会遇到一些问题。如果你想在propper“AndroidWay”上使用它,请使用Handler而不是TimerTask。
答案 2 :(得分:1)
我认为可以将TimerTask
设置为执行并以给定的间隔重复,Timer
在一个单独的线程上运行,这样所有这些工作都会在后台发生而不会打扰UI。当TimerTask
完成时,您可以轻松地在应用内触发更新,并在需要时更新UI。
退出应用时,只需在cancel()
上调用Timer
,然后使用purge()
清除所有任务。
简单易用,您不需要实施IPC,这可能非常繁琐,无法正确使用。
修改强>
使用AsyncTask
你几乎可以做同样的事情,但你必须手动安排下一次运行。我过去曾使用过这两种解决方案,并发现它们同样有效,所以这完全符合您的偏好。
答案 3 :(得分:0)
首先,我知道您正在关注的教程...我在尝试学习IPC时自己也遵循了该教程。您需要知道的一件事是,Android文档明确地说,
注意:仅当您允许来自不同应用程序的客户端访问IPC服务并希望在您的服务中处理多线程时,才需要使用AIDL。
如果可能的话,你应该bind to the service.
另外,你必须考虑,你真的需要一项服务吗?考虑到Android Twitter应用程序甚至不会根据需要为您刷新推文。轮询可能是电池密集型的,因此您必须考虑是否真的有必要。
另外,您是否会在多个活动中使用这些推文?如果是这样的话,不要在多个地方复制代码会很好。所以在这种情况下你可能想要一个服务。
除此之外,我建议你开始简单(带有计时器的异步任务来更新它),如果你认为需要它,就转移到服务。