7 votes

Lancement du service à partir du démarrage de l'application, et non de l'activité

Je veux lancer un Service lorsque l'application est lancée au lieu d'une activité ; et ensuite ledit service lancera an Activity . J'ai besoin de faire cela parce que mon application doit fonctionner TOUJOURS, et quand je dis TOUJOURS, je veux dire TOUJOURS. Et le seul moyen que j'ai trouvé pour éviter que le système d'exploitation ne tue mon application est de démarrer un service en tant que Sticky et si Android tue mon activité ou mon service, je les redémarre immédiatement.

J'ai trouvé ceci question mais la réponse du haut semble plutôt maladroite, quelqu'un a une meilleure idée ?

PS : Je sais que cela n'a pas l'air d'une application très conviviale, mais il s'agit d'un scénario de recherche très spécifique et il n'est pas destiné aux utilisateurs réguliers, c'est-à-dire que le téléphone est uniquement utilisé dans ce but ; mais même si la mémoire est dédiée à mon application, Android continue de la tuer de temps en temps... Tous les doutes que je pouvais avoir sur la prétendue rigueur de la gestion de la mémoire d'Android ont maintenant disparu.

14voto

Marcin Orlowski Points 24633

En général L'activité ne doit PAS obligatoirement présenter une interface utilisateur. C'est généralement le cas, mais ce n'est PAS obligatoire. . Vous pouvez donc simplement fixer le point de départ de l'application à votre activité "invisible". Et invisible signifie que vous êtes soit thématisé comme

android:theme="@android:style/Theme.NoDisplay"

ou simplement votre code ne fera rien setContentView() et une fois que le travail est fait dans votre onCreate() vous démarrez une autre activité et terminez celle-ci par finish() - et aucune interface utilisateur ne s'affichera à partir de cette activité. De cette façon, vous pouvez facilement faire votre travail dans une sous-classe d'activité (ce qui peut être plus simple pour certaines tâches) et ne pas avoir besoin d'interface utilisateur :

public void onCreate(Bundle bundle) {
   super.onCreate(bundle);

   // [... do your job here...]

   // we're done, so let's jump to another acitivity
   // this can be skipped if you do not want to jump anywhere

   Intenet intent = new Intent(....)
   ...

   try {
      startActivity( intent );

      // finish him
      finish();

   } catch ( Exception e ) {
      e.printStackTrace();
   }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X