我有两个意图服务的例子。 一个是commonsware书中的下载示例。 另一个是在 http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler。这两个示例都显示了执行有限任务的服务,并且它们显然都通过运行到 onHandleIntent 事件范围的末尾来破坏自己。
我正在编写的服务必须有事件并倾听事物。 一个是侦听GPS移动的LocationListener。 另一个将帖子发布到 REST 服务并侦听回复。 我希望它一直运行到一段时间过去或启动它的活动告诉它退出为止。
如何保持它运行? 例如,我应该把LocationListener的实现放在哪里?谢谢,加里
如何保持它运行?
你没有。 IntentService
旨在完成一项工作(或者如果命令碰巧快速传入,则可能是队列中的一些工作),然后关闭。
我正在编写的服务必须有事件并倾听事物。
那么你不应该使用IntentService
。根据需要使用常规Service
,以及您自己的后台线程。
要保持服务运行,您的服务需要在服务方法 onStartCommand()
中返回START_STICKY
。
这样,即使您退出活动,该服务也将运行。
注意:如果服务不是前台服务,Android 仍然会在一段时间后(30 分钟到 1 小时)终止服务。使用startForeground(notification)
使其成为前景。
祝你好运
您可以通过以下两种方式之一实现此目的,
- 警报管理器
- 定时器任务
AlarmManager是android的in-buite类,它允许你在特定时间执行某些操作。
TimerTask与AlarmManager执行相同的操作,您可以一次又一次地重复代码的某些操作。
然而,AlarmManager在执行中是固定的,所以我建议你使用AlarmManager类。
创建一个警报管理器,用于获取 GPS 坐标并定期将其发布到服务器。
看看这个警报管理器示例。