Gewinde für ServiceConnection Callback (Android)
-
25-09-2019 - |
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 :
- Ist das dumm, keine besseren Möglichkeiten? :)
- 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);
}
}
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.