web-dev-qa-db-fra.com

garder le service d'arrière-plan actif après l'application de sortie d'utilisateur

J'essaie de créer un service qui effectuera des tâches en arrière-plan pour moi même après que l'utilisateur aura fermé l'application dans le menu des processus en cours (en déplaçant le processus hors de l'écran).

Ce que j'ai essayé de faire est de créer un service dans un processus différent en le déclarant ainsi:

  <service
        Android:name=".service.Service"
        Android:enabled="true"
        Android:icon="@drawable/ic_launcher"
        Android:process=":my_process" >
  </service>

et onStartCommand () est:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}
12
Nativ

Selon la documentation Android vous pouvez obtenir ce problème en utilisant l'attribut:

 Android:isolatedProcess="true"

En passant, je sais que cela ne répond pas à la question, mais cela pourrait également aider certaines personnes. Récemment, j'ai découvert l'existence d'une excellente bibliothèque tierce créée par les développeurs Evernote. Son nom est Android-Job et son objectif est de créer des travaux qui s'exécutent sur différents processus et peuvent redevenir actifs même après le redémarrage d'un périphérique, c'est incroyable.

5
Nativ

En réalité, il existe différents types de services que vous pouvez implémenter. Utilisez un service au lieu de IntentService. Là, vous devez regarder START_STICKY, START_NOT_STICKY et START_REDELIVER_INTENT pour que votre service continue de fonctionner en arrière-plan, même si votre activité décède. Services Android consultez également les services AIDL

1
Viswanath Lekshmanan

Pour cela, vous pouvez utiliser les classes Handler et Runnable

   @Override
    public void onCreate()
    {

        Toast.makeText(context, "SMS SERVICE START", Toast.LENGTH_SHORT).show();


        handler=new Handler();
        runnable=new Runnable() {
            @Override
            public void run()
            {

                    TASK();
                    handler.postDelayed(runnable,180000);
// 3min delay
            }
        };

        handler.postDelayed(runnable,180000);
        super.onCreate();
    }

Cette tâche a duré 3min 

public void TASK()
{
     //your task 

}
0