我正在开发一个位置跟踪应用。我有应用程序的机制,可以定期检测服务中的位置变化。
我的服务一直运行,这是我想要的,但偶尔我发现服务已经停止。在我的清单中,我在我的主要活动上设置android:configChanges="orientation|keyboardHidden"
,因此每次方向更改时都不会重新创建,但我是否需要为每个活动和服务执行此操作?
此外,可能是操作系统终止了我的服务。在这种情况下,是否有办法强制系统忽略我的服务或在一定时间后自动重启服务?
谢谢!
答案 0 :(得分:2)
我的服务一直运行,这就是我想要的
您的用户可能不同意。
但我是否需要为每项活动和服务执行此操作?
您可能不应该为任何组件执行此操作。这主要是针对UI过于复杂而无法在新活动(例如,某些游戏,视频回放)中成功重新呈现或者活动也被锁定到特定方向的情况。无论如何,服务都没有android:configChanges
属性。
可能是操作系统终止了我的服务
操作系统将关闭泄露的服务,例如你的服务,以防止电池过度耗尽。
有没有办法迫使系统忽视我的服务
您可以使用startForeground()
。
或在设定的分钟数后自动重启服务?
从START_STICKY
返回START_REDELIVER_INTENT
(或可能是onStartCommand()
)。
更好的方法是重新考虑你的方法。保持位置跟踪 - 特别是GPS - 是一个重要的电池消耗。应用程序相当少,应该在后台持续监视位置。如果您经常需要经常进行位置修复(例如,每15分钟一次),请使用AlarmManager
启动服务以获得修复,然后让服务调用stopSelf()
消失,直到下一次报警。