繁体   English   中英

Android服务和活动

[英]Android Services and Activities

我对Android服务和活动生命周期有一些疑问。 希望你们能帮助我。 我已经编写了一个使用GPS位置并将其存储的应用程序。 它必须不断监视GPS位置更新才能正常工作。

现在,这是一项活动。 因此,当您关闭活动时,您将失去一切,无法继续监视位置更新。 这就是为什么我要为监视部分提供后台服务。 而且我一直在阅读《 Android开发人员指南》和《参考》,但仍然不能完全理解activity-service-process-lifecycle的知识。

考虑一下:启动应用程序。 它已获得GPS修复,现在您可以开始监视位置更新并保存它们。 这样做时,它应该启动一项接收GPS位置更新的服务。 因此,现在您有一个活动和一个在同一过程中运行的服务。 好。 但是,如果您按下手机上的硬件“后退”按钮会怎样? 只会在活动仍在运行您的服务的情况下终止活动吗? 还是会杀死活动和服务,进而杀死过程? 有什么方法可以确保在活动被杀死后,服务仍在同一进程中运行? 但是,没有一种方法像远程过程的整个辅助工具那样复杂吗?

对我来说,在新进程中创建服务似乎是不必要的,因为没有其他应用程序可以使用我的服务,我只需要监视部分在(GUI)活动终止时继续运行。 我想在开发人员站点上制作类似于“本地服务”示例的内容,但是我必须确保在活动被杀死后该服务能够继续运行。

当用户单击“ back按钮时,与系统结束运行应用程序的进程结束时不同。当前activityfinish()但该进程仍处于活动状态。 只要内存允许,Android就会使该服务保持活动状态,无论该活动是否可见。

来自文档

如果服务已经启动,则其托管过程被认为比当前用户在屏幕上可见的任何过程都没有重要,但比任何不可见的过程都更重要。 因为通常只有几个进程对用户可见,所以这意味着除非存在极低的内存条件,否则不应终止该服务。

但是,服务不应永远保留在内存中,这是一种不好的做法,并非您想要的。 我建议结合使用IntentService以通过LocationListenerLocationManager 链接到文档来接收位置更新

public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)

这个设置应该可以很好地为您服务,因为在每次更新时,您都可以触发一个可以由您的Service处理的Intent ,如果该Intent尚未激活,则会被创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM