【问题标题】:How to make a service running in background and never stop?如何使服务在后台运行并且永不停止?
【发布时间】:2014-12-25 13:39:53
【问题描述】:

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

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

1) 是否可以在 Android 中做到这一点

2) 如果是,我该怎么做?我只需要一个全局步骤。无需详细说明。

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

【问题讨论】:

标签: java android android-service


【解决方案1】:

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

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

只是这个代码sn-p

@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,尤其是服务生命周期更改部分。

【讨论】:

    【解决方案2】:
    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.
    

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

    但是,用户可以控制他们的设备,他们可以随时停止服务。这意味着如果用户关闭应用程序并将其从最近的应用程序列表中删除,那么服务将被KILLED。仅当用户从 Application Manager 强制停止应用程序时,该服务才会被销毁。在这种情况下,您的服务无法重新启动,直到用户再次启动应用程序并且系统停止警报。

    希望对你有帮助!

    【讨论】:

    • 另外,尝试在单独的线程中启动服务,这样当你销毁你的活动时,服务不会受到影响。它将不间断地运行。检查这个答案:stackoverflow.com/questions/9177212/….
    猜你喜欢
    • 2014-11-06
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2011-06-15
    相关资源
    最近更新 更多