Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 25/07/12, 11:32:39
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Registrarse correctamente a las SharedPreferences

Vaya cantidad de horas perdidas por las preferencias de marras... Comento esto por si a alguien le pasan "cosas raras" al cambiar las preferencias (y de paso para acordarme yo mismo más tarde de los entresijos).

Primero, en mis actividades yo me registraba al listener de las SharedPreferences en el onCreate, y por algún motivo pensaba que al registrar la siguiente actividad, la primera dejaría de recibir eventos. Error.

El caso es que más o menos es así, porque los listeners los guarda como una WeakHashMap según leí en stackoverflow, así que cuando la actividad se cierra es muy probable que desaparezca de los listeners. Aunque no siempre...

La recomendación es registrarse en el onResume y des-registrarse en el onPause, para evitar tener varias actividades escuchando eventos que pudieran tener interacciones indeseadas (si en el evento simplemente cambias algo de la vista da igual, pero si hay código que toque más cosas igual se lía como me pasó a mí y no hay quien lo depure)


Código:
	@Override
	protected void onResume() {
		super.onResume();
	        prefs.registerOnSharedPreferenceChangeListener(this);
	}

        @Override
	protected void onPause() {		
		super.onPause();
		prefs.unregisterOnSharedPreferenceChangeListener(this);
	}
¿Qué pasa con esto? Que si usas el típico menú de preferencias para configurar las cosas, tu actividad no se entera de los cambios porque al entrar al menú de preferencias se queda en pausa y retira el listener. Lo que te obliga a procesar todas las preferencias en el onResume por si algo ha cambiado mientras.

Conclusión que he sacado: si usas un menú de preferencias y ocurren cosas raras al cambiar un valor, olvídate de los listeners de las SharedPreference y simplemente lee manualmente las preferencias cada vez en el onResume de tus actividades.
Responder Con Cita


Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 00:15:35 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007