2015-11-04 166 views
-1

我正在开发一个Android项目,即使设备被锁定,我也需要应用程序才能工作。Android长时间运行服务

想法是打开将启动(意图)服务的应用程序,该服务始终处理数据。设备可以被锁定/放置,并且在打开应用程序一段时间后,该服务被手动停止。该服务应始终在后台运行

我在网上找到的信息,但我不知道使用什么和以何种方式..

我发现,IntentService可以使用。此服务应运行在新线程。我需要一直处理来自gps的数据,我应该使用WakefulBroadcastReceiver

谢谢。

回答

1

IntentService不一定是你想要使用的。它会自动产生一个新线程来处理传入的Intent。一旦处理完所有输入的Intents,它将停止Service。要长时间运行Service,您需要从Service派生,并在启动时从onStartCommand()方法返回START_STICKY,再加上自己的线程来处理您的后台工作。

如果您需要监控GPS,则必须在使用WakeLock保持设备保持清醒状态的同时进行管理。请注意,在棉花糖中,由于新的打盹模式,即使忽略棉球,它也会变得更加复杂。

另外,请注意,Android的架构方式仍有可能会导致运行后台Service的应用程序被终止。 Android使用基于内存压力和用户感知优先级的独特流程管理技术来确定流程应该停留多久。我建议阅读文档中的Service生命周期。

0

在android中,他们不是一种傻瓜证明的方式,可以确保您的服务永远运行,因为当系统需要资源时(基于某个内存阈值),LMK(低内存杀手)会终止服务,如果它可以重新启动服务。如果正确处理重新启动,服务将继续运行。

给予前景优先级的服务明显不太可能被杀掉,所以这可能是你最好的选择。然而,它们将会是您的服务在顶部菜单栏中的后台运行通知。 Foreground Service