web-dev-qa-db-fra.com

comment empêcher le service de s'exécuter à nouveau s'il est déjà en cours d'exécution android

En cliquant sur un bouton, je veux démarrer le service en utilisant la méthode startService(new Intent(currentActivity.this,MyService.class)) mais si le service est en cours d'exécution, je ne veux pas appeler cette méthode pour éviter d'exécuter le service qui est déjà en cours d'exécution.Comment cela est possible.J'utilise Service d'intention et Service dans le même projet et veulent appliquer la même condition pour les deux.

37
Atul Bhardwaj

Un service ne s'exécutera qu'une seule fois, vous pouvez donc appeler plusieurs fois startService(Intent).

Vous recevrez une onStartCommand() dans le service. Alors garde cela en tête.

Source: Notez que plusieurs appels à Context.startService() ne sont pas imbriqués (bien qu'ils entraînent plusieurs appels correspondants à onStartCommand()), donc quel que soit le nombre de démarrages, un service sera arrêté une fois que Context.stopService() ou stopSelf() est appelée; cependant, les services peuvent utiliser leur méthode stopSelf(int) pour garantir que le service n'est pas arrêté tant que les intentions démarrées n'ont pas été traitées.

À: http://developer.Android.com/reference/Android/app/Service.html sur le sujet: Service Lifecycle

75
Ion Aalbers

Utilisez startService(). Démarrer le service appellera onStartCommand() Si le service n'est pas encore démarré, il appellera onCreate(). Initialisez vos variables et/ou démarrez un Thread dans onCreate().

20
Thijs Limmen

Liez votre service; au début de l'appel:

Intent bindIntent = new Intent(this,ServiceTask.class);
    startService(bindIntent);
    bindService(bindIntent,mConnection,0);

Ensuite, pour vérifier si votre service fonctionne, utilisez une méthode comme:

    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; 
        }
7
Samuel

Chaque fois que nous démarrons un service à partir d'une activité, Android appelle la méthode onStartCommand () du service et si le service n'est pas déjà en cours d'exécution, le système appelle d'abord onCreate (), puis il appelle onStartCommand ( ).

Cela signifie donc que Android ne démarre qu'une seule fois dans son cycle de vie et le continue de fonctionner jusqu'à ce qu'il soit arrêté. Si tout autre client veut le redémarrer, seule la méthode onStartCommand () sera invoquée tout le temps .

1
Krrish