我正在开发Android项目,即使设备被锁定,我也需要该应用程序才能正常工作。
想法是打开将启动(Intent)服务的应用程序,该服务始终处理数据。设备可以锁定/收起,打开应用程序一段时间后,手动停止服务。该服务应始终在后台运行。
我在网上找到了信息,但我不知道该使用什么以及以哪种方式...
我发现可以使用 IntentService 。该服务还应该在新主题中运行。我需要一直处理来自gps的数据,我应该使用 WakefulBroadcastReceiver 吗?
谢谢。
答案 0 :(得分:1)
IntentService
不一定是您想要使用的。它会自动生成一个新线程,只是为了处理传入的Intent
。处理完所有传入的Intent
后,它将停止Service
。要长时间运行Service
,您需要从Service
派生,并在启动时从START_STICKY
方法返回onStartCommand()
,再生成您自己的线程来处理您的背景工作。
如果您需要监控GPS,则必须对其进行管理,并使用WakeLock
保持设备处于唤醒状态。请注意,在Marshmallow中,由于新的Doze模式甚至忽略了唤醒锁,因此会变得更加复杂。
另外,请注意Android的架构方式仍有可能导致运行后台Service
的应用程序被杀死。 Android使用基于内存压力和用户感知优先级的独特流程管理技术来确定流程应该保留多长时间。我建议您阅读文档中的Service
生命周期。
答案 1 :(得分:0)
在android中,他们不是万无一失的确保你的服务永远运行的方式,因为当系统需要资源(基于某个内存阈值)时LMK(低内存杀手),杀死服务然后它可以重新启动它。如果正确处理重新启动,服务将继续运行。
获得前景优先级的服务被杀掉的可能性显着降低,因此这可能是您最好的选择。但是,他们将在顶部菜单栏的后台运行您的服务通知。 Foreground Service