如何使服务在后台运行并永不停止?

时间:2014-12-25 13:39:53

标签: java android android-service

我做了一些研究,发现我们可以使用Android services在bakground中运行服务。

现在我想保持服务运行,即使我关闭了我的主应用程序(并将其从recent apps列表中删除)。然后,如果我想查看服务状态,我必须重新打开我的应用程序并检查后台服务的状态

1)是否可以在Android

中执行此操作

2)如果是,我怎么能这样做?我只需要一个全球性的步骤。无需细节。

请注意我的后台服务应该访问网络和磁盘

2 个答案:

答案 0 :(得分:2)

你可以覆盖Service.onStartCommand()回调,这里的关键部分是函数返回的新结果代码,告诉系统如果它的进程在运行时被杀死它应该对服务做什么:

START_STICKY 如果此服务的进程在启动时被终止(从onStartCommand(Intent,int,int)返回后),则将其保持在启动状态但是不要保留这个意图。稍后系统将尝试重新创建服务。因为它处于启动状态,所以它将保证在创建新服务实例后调用onStartCommand(Intent,int,int);如果没有任何待处理的启动命令要传递给服务,则将使用空的intent对象调用它。

只是这段代码

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

请检查此service api changes,尤其是“服务生命周期更改”部分。

答案 1 :(得分:1)

1) Is it possible to do that in Android

在使用Android后台服务多年后,我认为第一个问题的答案是YES

2) If yes How I can do that? I Just need a global steps. No need for details.

我建议您运行服务并从START_STICKY返回onStartCommand(Intent, int, int)。这样做只会确保您的服务仅在 SYSTEM (即Android操作系统) KILLED 时重新创建。我已经看到,开发人员建议使用单独的警报来定期检查服务状态,如果由于某种原因停止服务,则重新运行服务。

但是,用户可以控制他们的设备,他们可以随时停止服务。此 DOESN' T 表示如果用户关闭应用程序并将其从最近的应用列表中删除,则该服务将 KILLED 。仅当用户 Forcce停止来自应用程序管理器的应用程序时,才会销毁该服务。在这种情况下,您的服务无法重新启动,直到用户再次启动应用程序,并且系统也会停止警报。

希望它有所帮助!!