我创建了一项服务,并希望此服务始终在运行。 但是当我关闭创建服务的应用程序时,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}
答案 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
变量,则不会跨进程共享它们。如果你不明白发生了什么,这会让你的生活变得悲惨。