如何在用户退出应用程序后仍然保持服务运行?

34

我正在开发一款应用程序,如果用户启用了特定功能(在我的应用程序中),我将启动一个服务。 我希望即使用户退出我的应用程序,该服务仍能继续运行。 请问我该如何做到这一点? 请帮忙。


1
当用户退出应用程序时,请不要关闭服务。在没有前台活动的情况下在后台运行,这正是服务的用途所在。您能否明确您的问题是什么? - DeeV
3个回答

23

这段内容来源于developer.android.com

服务是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行工作。服务不提供用户界面。例如,服务可能会在用户处于不同应用程序时在后台播放音乐,或者在不阻塞用户与活动交互的情况下从网络中获取数据。另一个组件,如活动,可以启动服务并让它运行,或绑定到服务以与其交互。服务是作为Service子类实现的,您可以在服务开发人员指南中了解更多信息。

因此,只要创建了服务,并且用户退出您的应用,它仍然会运行。就像上面的例子。

这里有你需要的所有信息: https://developer.android.com/guide/components/services.html


9
如果一个任务管理器(现在手机上很常见)终止了服务,这将无法使服务继续运行。服务中的onStartCommand(...)需要返回START_STICKY。 - user1406716
2
是的,START_STICKY会在服务被杀死时重新创建服务。 - EGHDK
@EGHDK 这个是如何实现的? - Sauron
我在我的服务中创建了一个通知构建器,但它只在我的应用程序打开时才起作用。我想知道是否应该在我的服务中调用 onCreate() - Kairi San
在使用音乐播放器时,对我最简单的方法是将服务作为startForeground(notificationId, notification)启动;当您想要停止它时,只需简单地调用stopForeground(true)即可。 - Ankush Joshi

7

您可以使用Alarm Manager来管理任何后台服务。

对于特定的时间,您希望执行某些操作,这可以是服务。

而对于持续的进程,您可以从 Alarm Manager 启动服务。


5

以下是 Android 建议的一种方法:

一个已启动的服务可以使用 startForeground(int, Notification) API 将该服务置于前台状态,系统会认为用户正在积极使用该服务,因此在内存不足时,该服务不会成为被杀死的候选项。(理论上,当前前台应用程序产生极端内存压力时,该服务仍有可能被杀死,但在实际应用中,这不应该成为一个问题。)

另一种方法是在服务停止时重新启动它(系统会调用已停止服务的 onDestroy() 方法)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接