什么时候应该停止服务

问题描述:

我的android应用程序在扩展Application的类的onCreate()回调中启动服务。该服务仅在应用程序运行时执行与用户相关的一些后台任务。出于这个原因,我想在应用程序的上一次活动关闭时关闭该服务。我试图在回调函数onTerminate()中执行关闭服务,但它永远不会被调用。那么服务应该关闭的最佳地点是什么?什么时候应该停止服务

谢谢!

+0

Android中没有“应用程序运行时”的概念,它不仅仅是Web应用程序中的“应用程序正在运行时”的概念。您可以自行记帐以“跟踪应用程序的最后一次活动何时关闭”(无论您认为“关闭”是指)还是重写您的应用程序以拥有更明智的服务策略。很少有应用程序需要服务以“应用程序正在运行时”的范围连续运行 - 要么工作应该继续直到完成,要么工作应该继续,直到用户告诉您停止或者其他事情。 – CommonsWare 2011-06-09 12:10:46

一旦启动,Android服务将继续运行,直到调用Context.stopService()或stopSelf()。

您可以使用各种挂钩来使用Context.stopService(服务本身,或其中一个活动的onDestroy()/ onPause回调,或单击按钮)来停止服务。

确实,Android本身做了一些资源管理,但是在Android决定终止你的服务之前可能需要很长时间。而一个正在运行但没有做任何事情的服务只会消耗其他应用可能需要的手机资源。

在你的情况下,你最后一次活动的onPause方法将是一个很好的将被调用,因此是停止服务的正确位置。

onPause()回调将在您的活动由于任何原因而暂停时发生,并且您知道发生这种情况时,在调用onResume()之前,您的应用程序将不会再次可见。如果您的服务有理由在您的活动可能可能很快重新启动的情况下运行,则应该向onPause()调用的服务中添加一个条目,以设置延迟的服务终止。在onResume()中,您可以通过另一个条目取消该延迟终止。