Frage

Ich entwickle eine Tätigkeit, dass bindet an einen lokalen Dienst (in onCreate der Aktivität):

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

Ich möchte in der Lage sein, die IBinder rufen Methoden durch in meiner Lebenszyklus Methoden, kann aber nicht sicher sein, dass onServiceConnected hat vor diesem aufgerufen wurde. Ich denke, dies den Umgang mit einer Schlange von Sorten in der ServiceConnection Implementierung hinzufügen, so dass die Methodenaufrufe (Befehlsmuster) werden ausgeführt, sobald die Verbindung hergestellt ist.

Meine Fragen sind dann :

  1. Ist das dumm, keine besseren Möglichkeiten? :)
  2. Gibt es irgendwelche Spezifikation für den Thread verwendet werden, um die ServiceConnection Rückrufe ausführen? Mehr zu dem Punkt, muss ich Sorge brauchen, um über die Synchronisation eine Warteschlange Datenstruktur?

Bearbeiten - so etwas wie:

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

    for(ExecutionTask task : queue){
        dispatchService.execute(task.getCommand(), task);
    }
}
War es hilfreich?

Lösung

  

Gibt es eine Spezifikation für die   Thread wird verwendet, um die zur Ausführung   ServiceConnection Rückrufe?

Es sollte auf dem Hauptanwendungsthread, wie jeder andere Rückruf aufgerufen werden.

  

Mehr zu dem Punkt, muss ich zu kümmern   über eine Warteschlange Synchronisierung   Datenstruktur?

Das hängt davon ab, wo Sie Objekte in der Warteschlange hinzufügen. Wenn es nur aus dem Hauptanwendungsthread ist, dann sollte es keinen Streit sein, AFAIK.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top