如何确保在安卓系统中不会启动两次同一个服务

22

在启动服务之前,有没有一种方法可以检查服务是否已经在运行?

如果它可以在服务的onCreate()中完成,那就更好了。

谢谢!

3个回答

36

如果您尝试再次启动服务,它将保持运行状态。但是,无法启动两次同一个服务。查看 Android 文档。


1
可能是由于其他原因导致了程序崩溃。 - waqaslam
根据文档:“请注意,多次调用Context.startService()不会嵌套(尽管它们会导致多个相应的onStartCommand()调用),因此无论启动了多少次服务,只要调用Context.stopService()或stopSelf(),服务就会停止;”。http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle - Tazzy531
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ruchir Baronia
@RuchirBaronia 为什么不试一下呢? - Matt K

0

我刚在 Android 9 (API 28) 上进行了测试,你可以使用相同的Intent无限次启动同一个服务:

onCreate() {
    startMyService();
    startMyService();
    startMyService();
    startMyService();
    startMyService();
    startMyService();
    startMyService();
    startMyService();
    startMyService();
    startMyService();
}
private void startMyService() {
    Intent serviceIntent = new Intent(this, MyService.class);
    ContextCompat.startForegroundService(this, serviceIntent);
}

避免这种情况的一种方法是在启动之前通过传递相同的Intent来停止它:

private void startMyService() {
    Intent serviceIntent = new Intent(this, MyService.class);
    stopService(serviceIntent); // <<<<< this line makes sure that you don't start it twice or more times
    ContextCompat.startForegroundService(this, serviceIntent);
}

-2

在服务中使用布尔值/标志来修复它。 (一个服务只能启动一次)


2
你不应该这样做。这可能表明存在其他问题。你是否在服务的onStartCommand()中做了一些本应该在onCreate()中完成的事情? - Matt K
1
没有人能从你的回答中得到答案。 - Ranjithkumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接