2012-04-14 16 views
5

He registrado registerOnSharedPreferenceChangeListener con mi SharedPreferences en mi actividad. Cuando cambio los datos guardados con SharedPreferences dentro del servicio que se ejecuta en un proceso diferente, ¡onSharedPreferenceChanged no se llama!registerOnSharedPreferenceChangeListener no funciona para los cambios realizados en el proceso diferente

¿Qué debo hacer para hacer una llamada a Android onSharedPreferenceChanged?

+0

¿Necesita más información ... También puedes ver este [http://stackoverflow.com/questions/3799038/onsharedpreferencechanged-not-fired -si-cambio-ocurre-en-actividad separada] [1] [http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being-called-consistently/3104265#3104265] [ 2] [1]: http://stackoverflow.com/questions/3799038/onsharedpreferencechanged-not-fired-if-change-occurs-in-separate-activity [2]: http: // stackoverflow .com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being-called-consistentntly/3104265 # 3104265 – San

Respuesta

15

Lo más probable es que sea basura recogida por gc. Me he enfrentado a este problema antes. Haga una variable global que guarde una referencia difícil al oyente.

OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
     // Implementation 
     } 
    }; 

La respuesta a SharedPreferences.onSharedPreferenceChangeListener not being called consistently lo explica mejor

+0

Intenté hacer esto ... ¡pero aún no funcionaba! A medida que cambio mi servicio para ejecutarlo en el mismo proceso, todo funciona bien ... supongo que OnChangeListener no puede detectar los cambios realizados por otro proceso ... –

+1

este oyente sería parte del proceso en el que se encontraba creado como se haría en su contexto. puede que tenga que implementar otro oyente en otro proceso. – Akhil

+0

Después de implementar el oyente en otro proceso, ¿cómo voy a actualizar la vista actual? Me refiero a la interacción de mi actividad actual desde el onChangeListener en algún otro proceso. –

Cuestiones relacionadas