2014-12-25 130 views
1

我做了一些研究,我发现我们可以使用Android services在bakground上运行服务。如何使服务在后台运行并永不停止?

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

1)的状态是有可能做到这一点在Android的

2)如果是的话我怎么能去做?我只需要一个全球性的步骤。不需要细节。

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

+0

[Android独立服务]的可能重复(http://stackoverflow.com/questions/18917380/android-stand-alone-service) – gio

+0

http:// developer。android.com/reference/android/app/Service.html#START_STICKY – VenomVendor

+0

您可以对答案的评论发表评论吗? – abhinav

回答

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. 

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

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

希望它有帮助!

+0

另外,尝试在单独的线程中启动服务,以便在您销毁活动时服务不会受到影响。它会毫无中断地运行。检查这个答案:http://stackoverflow.com/questions/9177212/creating-background-service-in-android/13263052#13263052。 – abhinav

+0

请问您可否对评分表决置评? – abhinav

2

您可以覆盖Service.onStartCommand()回调,这里的关键部分是由函数返回,系统知道它应该与服务做了新的结果代码,而它正在运行,如果它的进程被终止:

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

只是这个代码片断

@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尤其是服务生命周期中的变化部分。