Ich habe diesen hilfreichen Beitrag gelesen:
SharedPreferences.onSharedPreferenceChangeListener wird nicht konsistent aufgerufen
Aber ich habe kein Glück. Ich versuche, einen OnSharedPreferenceChangeListener zu erstellen, der in einem Dienst ausgeführt wird. Alles ist korrekt implementiert, aber der Listener wird nicht immer ausgelöst.
%Vor%AKTUALISIEREN
Das Problem rührt von einer Tatsache her, die ich nicht erwähnt habe. Ich führe zwei Dienste aus und wenn in MyService2 Änderungen an der gemeinsamen Einstellung vorgenommen werden, wird nichts ausgelöst. Im Manifest definiere ich die Dienste, die in verschiedenen Prozessen laufen sollen. Gibt es eine Möglichkeit, dies zum Funktionieren zu bringen?
Nachdem ich einige Erfahrungen mit Android gesammelt habe, bin ich zurückgekommen, um diese Frage zu beantworten und anderen zu helfen, die Probleme mit dieser Art von Situation haben.
Die Implementierung von OnSharedPreferenceChangeListener ist korrekt. Das Problem liegt in der Manifest- und Anwendungsarchitektur. Da die Dienste in verschiedenen Prozessen laufen, hat Android für jeden Dienst eine Dalvik Virtual Machine erstellt, daher hören sie sich nicht gegenseitig an.
Dies war nur ein schlechtes Design - Der bessere Weg, die Idee der Ausführung von zwei gleichzeitigen Diensten anzugehen, besteht darin, einen Dienst zu erstellen, der jeden "Dienst" für den gleichzeitigen Betrieb abtrennt. Auf diese Weise können sie denselben Heap teilen und teilen somit dieselben Objekte & amp; Listener
Wenn jemand bestimmt war, zwei Dienste zu verwenden, könnten sie einen BroadcastReceiver erstellen, um Absichten zu erfassen, damit Präferenzen geändert werden müssen - oder über Sockets kommunizieren. Es gibt auch Möglichkeiten, dies mit einem ContentProvider zu tun (bitte TUN SIE DIES NICHT). Aber auch hier gibt es keinen Grund, wenn das Design gut ist.
Tags und Links android service onchange listener preference