Ich habe statische Methoden in einer Klasse namens Remote synchronisiert, die von einem Dienst aufgerufen werden, um Daten aus dem Netzwerk abzurufen. Der Dienst ist ein IntentService, der jedes Mal gestartet wird, wenn der Benutzer in der Benutzeroberfläche eine Liste nach unten scrollt und weitere Elemente abgerufen werden müssen. Die Methoden werden synchronisiert, da sie auch aus einer anderen Quelle, dem Syncadapter, aufgerufen werden. Zwei Aufrufe derselben Methode in Remote können nicht verschachtelt werden. Aber da mein Syncadapter in einem separaten Prozess ausgeführt wird, der die Methoden synchronisiert, wird die Threadsicherheit nicht erzwungen und ich bekam inkonsistente Zustände.android Synchronisierungsmethoden über Prozesse hinweg
Ich löste dies, indem ich den Syncadapter zurück in den Hauptprozess laufen ließ. Genauer gesagt Entfernen des Werts android:process
aus dem Synchronisierungsdienst. Aber ich habe mich gefragt, ob es eine viel robustere Vorgehensweise gibt, die unabhängig von der Position des Syncadapters funktioniert.
ich mit SyncAdapter behandelt haben nicht viel, aber können Sie eine Synchronisierung des SyncAdapter "erzwingen", anstatt die synchronisierte Methode aufzurufen? –
Ja, aber die Logik ist anders. Im syncadapter rufe ich 3 oder 4 dieser synchronisierten Methoden auf, aber wenn sie über die Service Route aufgerufen werden, wird immer nur einer von ihnen aufgerufen. –