démarrage du service android en utilisant l'intention explicite ou implicite

Selon la norme Android documentation, la préférence pour démarrer un service (service) est l'utilisation d'une intention explicite comme ceci:

//Using explicit intent:
Intent serviceIntent = new Intent(getApplicationContext(), MyService.class);
//or:
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);

Vous pouvez également démarrer/arrêter un service à l'aide d'une intention implicite avec une chaîne d'action spécifié dans le manifeste, comme ceci:

//Using implicit intent:
static final String serviceAction = "com.example.my.app.services.MYSERVICE";
Intent serviceIntent = new Intent(serviceAction);
startService(serviceIntent);

//AndroidManifest.xml:
<service android:name="com.example.my.app.services.MyService"
   android:exported="false" android:process=":services" >
   <intent-filter>
      <!-- Start/Stop service -->
      <action android:name="com.example.my.app.services.MYSERVICE" />
   </intent-filter>
</service>

Lorsque le service est utilisé que localement (applications de tiers ne sont pas autorisés à démarrer ou se lier à elle), la documentation dit que vous ne devrait pas inclure un intent-filter dans le manifeste service de la balise et vous devez mettre le exporté balise de faux.

Note: les activités et les services s'exécutent dans des processus distincts (:application et :processus de services). La communication entre l'activité et le service est fait par la mise en œuvre de AIDL interfaces (c'est fait parce que seulement AIDL à distance de l'interfaçage me permet de faire du multi-threading dans le service à la poignée de la CIB simultanément, non seulement entre les activités, mais surtout entre les services en cours d'exécution au sein de l' :services de processus).

Mes questions sont:

Q1: Lorsque les activités et les services que j'utilise dans mon application sont deux processus différents, dois-je utiliser implicite intentions plus explicite les intentions pour démarrer et arrêter les services?

Q2: Quand l' :processus de demande est allé (détruit, pas dans la mémoire plus) et l' :services de processus est en cours d'exécution en arrière-plan, comment puis-je me connecter à nouveau à partir d'un nouveau :application d'un processus déjà en cours d'exécution :services de processus? En quelque sorte j'ai besoin d'obtenir une référence à l' :services de processus à nouveau afin que je puisse arrêter l'exécution d'un service à l'intérieur de ce processus. Cela ne peut être fait à l'aide de AIDL autant que je sache.

Le problème est que Android peut et va détruire l' :processus de demande d'facilement lors de la sortie de ressources, et c'est bien pour moi aussi longtemps que l' :processus des services de garde en cours d'exécution.
(Oui, je sais à propos d'influencer le processus en définissant le service de premier plan de service, etc. Moi aussi, je peux lire des manuels 😉 mais ce n'est pas mon problème).

Je ne trouve aucune information ou des réponses sur mes questions lorsque les activités et services sont séparés les processus et l'utilisation AIDL, ET lorsque l' :processus de demande doit "trouver" le :services de processus à nouveau après qu'il a été tué par Android ou lorsque l'utilisateur saisit de nouveau l'application (après qu'il a quitté l'application avant de l').

Tout niveau expert conseil est le bienvenu.

source d'informationauteur user504342 | 2013-09-20