2012-10-14 75 views
6

我有两个Intentservice的例子。一个是commonsware书中的下载示例。另一个在http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler。 这两个例子都显示服务执行一个有限的任务,并且他们都显然通过运行到onHandleIntent事件范围的末尾来销毁自己。如何保持运行Intent服务

我写的服务必须有事件和听取事物。一个是侦听GPS移动的LocationListener。另一个向REST服务发布帖子并收听回复。我希望它一直运行到一段时间,或者直到它被启动它的活动告知退出。

如何保持运行?例如,我在哪里放置了LocationListener的实现? 谢谢,加里

+0

即使我需要一个相同的问题的答案,在我的情况下,我从小部件开始手电筒,但它被杀死。 – user2548816

回答

13

如何保持它的运行?

你不知道。 IntentService被设计用来完成一项工作(或者如果命令恰好快速进入队列中,则可能排队几个),然后关闭。

我写的服务必须要有事件和倾听事情。

然后你不应该使用IntentService。根据需要使用常规的Service,并使用自己的后台线程。

+2

有人可以申请此答案吗? IntentService是Service的一个子类,那么为什么只有后者被用于(在一个新线程中)进行长时间运行/正在进行的操作? –

+0

@ ban-geoengineering:正如我写的,“IntentService”是围绕事务操作设计的,其中工作完成得相当快,然后服务应该关闭。如果你想要的运行时间比这个长,那么当你自己停止时(或者由客户端通过stopService()来停止),用你自己的控件创建你自己的'Service'。 – CommonsWare

+0

我明白你说了什么,但我想知道你从哪里得到这些信息,这样我就可以证实这确实如此。 –

-1

您可以通过以下两种方式实现这一目标,

AlarmManager是Android在-buite类,允许您在执行某些动作特定的时间周期。

TimerTask与AlarmManager具有相同的功能,您可以反复重复您的代码的某些操作。

但是AlarmManager在执行中很重要,所以我建议您使用AlarmManager类。

创建一个AlarmManager,获取GPS坐标并定期将其发布到服务器。

看看这个AlarmManager Example

+0

您的建议都不会阻止IntentService被销毁。无法在handleIntent方法中等待,无法保持活动状态。 – bluewhile

+0

@bluewhile我认为Lucifer基本上为使用IntentService提供了一个替代方案来完成这个特定的任务。 – AnixPasBesoin

-1

要使服务保持运行,您的服务需要在服务方法onStartCommand()中返回START_STICKY

使用此功能,即使退出活动,服务也会运行。

注意: 如果不是前台服务,Android仍会在一段时间后(30分钟到1小时)杀死服务。使用startForeground(notification)使其成为前景。

好运

+2

这并不能解释如何无限地运行IntenService。 –

相关问题