如果已经运行android,如何防止服务再次运行

Atu*_*waj 37 service android android-service

在点击按钮我想用方法来启动服务startService(new Intent(currentActivity.this,MyService.class)),但如果服务正在运行,我不想把这种方法做,以避免运行服务,已经running.How这possible.I是同时使用意向的服务服务在同一项目并希望为两者应用相同的条件.

Ion*_*ers 76

服务只运行一次,因此您可以startService(Intent)多次呼叫.

您将收到onStartCommand()服务.所以记住这一点.

来源:请注意,多次调用Context.startService()不会嵌套(尽管它们会导致多次相应的调用onStartCommand()),因此无论启动多少次,服务都会被停止一次Context.stopService()或被stopSelf()调用; 但是,服务可以使用它们的stopSelf(int)方法来确保在处理启动的意图之前不停止服务.

在:http://developer.android.com/reference/android/app/Service.html主题:服务生命周期

  • @AtulBhardwaj:调用`startService()`*总是*触发`onStartComand()`.期.所以,要么不调用`startService()`,要么有一个更聪明的`onStartCommand()`来处理多次调用. (10认同)

Thi*_*men 20

使用startService().启动服务将调用onStartCommand()如果服务尚未启动它将调用onCreate().初始化变量和/或启动一个Thread onCreate().

  • 这意味着我们只想启动服务 onCreate 调用一次? (2认同)

Sam*_*uel 7

绑定你的服务; 开始通话时:

Intent bindIntent = new Intent(this,ServiceTask.class);
    startService(bindIntent);
    bindService(bindIntent,mConnection,0);
Run Code Online (Sandbox Code Playgroud)

然后检查您的服务是否正常工作,使用如下方法:

    public static boolean isServiceRunning(String serviceClassName){ 
             final ActivityManager activityManager = (ActivityManager)Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);     
             final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);      
           for (RunningServiceInfo runningServiceInfo : services) {         
             if (runningServiceInfo.service.getClassName().equals(serviceClassName)){             
                return true;         
             }     
           }     
         return false; 
        }
Run Code Online (Sandbox Code Playgroud)

  • 这并不总是有效。它不考虑“服务被停止”。它主要用于显示正在运行的服务 UI。我用过这个,但它在 KitKat 中并不总是有效。相反,您可以始终使用 startService 并利用服务 onCreate 和 onStartCommand 来完成您的任务。这是正确的方法。 (2认同)
  • 为什么这里需要**绑定服务**?我们不能只使用**启动服务**? (2认同)
  • getRunningServices 已弃用 (2认同)

Mav*_*eňツ 5

每当我们从任何 Activity 启动任何服务时,Android 系统都会调用该服务的 onStartCommand() 方法,如果该服务尚未运行,系统首先调用 onCreate(),然后调用 onStartCommand()。

也就是说,android 服务在其生命周期中只启动一次,并保持运行直到停止。如果任何其他客户端想要再次启动它,则只会一直调用 onStartCommand() 方法。