我有两个Intentservice的例子。一个是commonsware书中的下载示例。另一个是http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler。 这两个示例都显示了服务执行有限任务,并且它们显然都是通过运行到onHandleIntent事件范围的末尾来自我毁灭。
我写的服务必须有事件和倾听。一个是LocationListener,用于监听GPS移动。另一个使Posts到REST服务并监听回复。我希望它一直运行直到一段时间过去,或者直到被启动它的活动告诉它退出。
如何让它继续运行?例如,我在哪里放置LocationListener的实现? 谢谢,加里
答案 0 :(得分:15)
如何让它继续运行?
你没有。 IntentService
旨在完成一项工作(或者如果命令恰好快速进入队列,可能会有一些工作),然后关闭。
我写的服务必须有事件和倾听。
然后你不应该使用IntentService
。使用常规Service
,根据需要使用您自己的后台线程。
答案 1 :(得分:0)
要使服务保持运行,您的服务需要在服务方法START_STICKY
中返回onStartCommand()
。
这样,即使退出活动,服务也会继续运行。
注意:强>
如果不是前台服务,Android仍会在一段时间(30分钟到1小时)之后终止服务。使用startForeground(notification)
使其成为前景。
答案 2 :(得分:-1)
您可以通过两种方式实现这一目标,
AlarmManager是android的in-buite类,允许您在特定时间内执行某些操作。
TimerTask与AlarmManager完全相同,您可以反复重复代码的某些操作。
然而,AlarmManager更容易执行,所以我建议你使用AlarmManager类。
创建一个AlarmManager,用于获取GPS坐标并定期将其发布到服务器。
请看一下这个AlarmManager Example。