2010-05-10 7 views
1

Je développe une activité qui se lie à un service local (en onCreate de l'activité):fil utilisé pour rappel ServiceConnection (Android)

bindService(new Intent(this, CommandService.class), svcConn, BIND_AUTO_CREATE); 

Je voudrais être en mesure d'appeler des méthodes par l'IBinder dans mes méthodes de cycle de vie, mais je ne peux pas être sûr que onServiceConnected a été appelé avant cela. Je pense à gérer cela en ajoutant une sorte de file d'attente dans l'implémentation de ServiceConnection, de sorte que les appels de méthode (Mot de commande) seront exécutés une fois la connexion établie.

Mes questions sont alors:

  1. Est-ce stupide, de meilleures façons? :)
  2. Existe-t-il une spécification pour quel thread sera utilisé pour exécuter les rappels ServiceConnection? Plus précisément, dois-je m'inquiéter de la synchronisation d'une infrastructure de données de file d'attente?

Edit - quelque chose comme:

public void onServiceConnected(ComponentName name, IBinder service) { 
    dispatchService = (DispatchAsync)service; 

    for(ExecutionTask task : queue){ 
     dispatchService.execute(task.getCommand(), task); 
    } 
} 

Répondre

0

Existe-t-il un cahier des charges pour lesquelles fil sera utilisé pour exécuter les callbacks ServiceConnection?

Il doit être appelé sur le thread d'application principal, comme tout autre rappel.

Plus précisément, dois-je vous soucier sur la synchronisation d'une file d'attente structure de données?

Cela dépend de l'endroit où vous ajoutez des objets à la file d'attente. Si c'est seulement à partir du thread d'application principale, alors il ne devrait y avoir aucune contention, AFAIK.

Questions connexes