2010-09-11 6 views
8

Je souhaite créer un service en utilisant la méthode bindService. Mais quand je ferme une activité mon service est détruit, et je ne le veux pas.Android bindService ou/et startService

Je tente de mettre le service au premier plan en utilisant le service startForeground(NOTIFICATION_ID, notification); onCreate, mais le service est toujours détruit.

Maintenant, j'essaie avec appel deux méthodes pour démarrer le service en même temps:

Intent bindIntent= new Intent(this, ServiceC.class); 
    startService(bindIntent); 
    bindService(bindIntent, onService, BIND_AUTO_CREATE); 

En appelant ces deux méthodes de service non détruits. Mon application fonctionne correctement avec cette méthode.

Quelqu'un peut-il m'expliquer si c'est un bon moyen ou si ce n'est pas le cas, pouvez-vous s'il vous plaît me donner une idée pourquoi startForeground(NOTIFICATION_ID, notification); ne fonctionne pas?

Quelle est la meilleure façon d'utiliser bindService mais en même temps je ne veux pas que le service se détruise.

+0

Je sais que c'est une vieille question, mais demander sans vergogne une bonne solution pour utiliser bindService? –

Répondre

7

J'ai utilisé la même solution et c'est une solution légitime. De Service ref:

Un service peut être à la fois et ont commencé connexions qui lui sont liés. Dans un tel cas , le système gardera le service en cours d'exécution tant qu'il est démarré ou qu'il y a une ou plusieurs connexions avec l'indicateur Context.BIND_AUTO_CREATE. Une fois que aucune de ces situations ne tient, la méthode onDestroy() du service est appelée et le service est effectivement terminé .

startForeground() ne fonctionne pas parce qu'il essaie simplement d'empêcher le service d'être tué par le système, mais son cycle de vie est une autre chose: si rien n'est plus lié à ce service et il n'a pas été démarré, il arrête juste .

+0

Vous ne déclarez donc pas de solution avec l'utilisation de bindService? nous devons changer toute notre implémentation de bindService à startService? –

0

Si vous démarrez le service avec startService(), il n'est pas détruit. J'ai essayé de démarrer un service, ce qui étend IntentService et a une boucle dans onHandleIntent(). Lorsque la boucle est terminée, le service est détruit et n'est pas associé à la fin de l'activité. L'utilisateur peut fermer l'application, mais le service n'est pas en train d'être tué.

public class MyService extends IntentService 
{ 
    private static final String serviceName = "MyService "; 

    public MyService() { 
    super(serviceName); 
    } 

    @Override 
    public void onDestroy() 
    { 
    Log.v(serviceName, "onDestroy"); 
    Toast.makeText(this, serviceName+" stopped", Toast.LENGTH_LONG).show(); 
    super.onDestroy(); 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 

    long endTime = System.currentTimeMillis() + 30*1000; 
    while (System.currentTimeMillis() < endTime) { 
     synchronized (this) { 
      try { 
       Log.v(serviceName, "Service loop"); 
       wait(1000); 
      } catch (Exception e) { 
      } 
     } 
    } 
    } 

} 
Questions connexes