如何避免重启服务?

时间:2015-01-22 17:07:52

标签: android service restart

我创建了一项服务,并希望此服务始终在运行。 但是当我关闭创建服务的应用程序时,Android会删除该服务,然后重新启动。

我的应用程序中的服务是通过按下MainActivity中的按钮创建的,如下所示:

startService(new Intent(getApplicationContext(), MyService.class));

logcat的:

  

01-22 11:44:52.242 1218-1389 / system_process I / ActivityManager:   杀戮2040:com.my.application / u0a10046:删除任务01-22   11:44:52.252 1218-1218 / system_process W / ActivityManager:调度   在5000ms内重启崩溃的服务com.my.application / .MyService   01-22 11:44:57.272 2061-2061 /? D / dalvikvm:不能迟到   CheckJNI(已经开启)01-22 11:44:57.272 1218-1235 / system_process   I / ActivityManager:启动proc com.my.application以获取服务   com.my.application / .MyService:pid = 2061 uid = 10046 gids = {50046,1028}

2 个答案:

答案 0 :(得分:1)

在您的服务类中,添加"返回START_NOT_STICKY"如下:

public int onStartCommand(Intent intent, int flags, int startId) {
    // your code ...
    return START_NOT_STICKY;
}

START_NOT_STICKY的含义是(在Service.java的java doc上提到):

  

从onStartCommand(Intent,int,int)返回的常量:如果是这个服务的话   进程在启动时被终止(在返回之后)   onStartCommand(Intent,int,int)),没有新的启动意图传递给它,然后将服务从启动状态中取出并且不重新创建   直到将来显式调用startService()   。该服务不会接收带有null Intent的onStartCommand(Intent,int,int)调用,因为如果没有待传递的Intent,它将不会重新启动。

答案 1 :(得分:0)

使用不同的Android版本,行为已经多次更改。在某些情况下,您无法阻止Android查看Service。在某些Android版本中,如果您将Service放在单独的进程中,它会有所帮助。通常,当您从最近任务列表中滑动应用时,Android会终止托管您的活动的进程,但保留托管您Service的进程。为此,请添加

android:process=":service"

清单中的<service>声明。

请注意,您现在将运行2个进程,这会使某些事情变得更复杂。如果您有自定义Application类,则将在EACH过程中创建它的实例。如果您依赖static变量,则不会跨进程共享它们。如果你不明白发生了什么,这会让你的生活变得悲惨。