2011-01-25 18 views
5

Tengo una pregunta básica con respecto a cuándo unregisterListener para el administrador del sensor. Debería hacerse en onStop() o onDestroy().Android: cuándo anular el registro del oyente - onStop() o onDestroy()

USECASE:

Quiero grabar accelorometer al hacer clic con el botón de arranque y parada cuando el usuario hace clic botón de parada. la frecuencia de los datos es cada minuto. Entonces comencé un timer.

Pero el problema es que cada vez que orientation cambia según la arquitectura de Android, se llama onStop(). En onStop() estoy cancelando el temporizador y anulando el registro del oyente.

SO otra vez si comienzo el escucha de temporizador/registro en onResume() la frecuencia no se mantendrá 1 minuto y también los datos se grabarán sin que el usuario presione el botón de inicio.

¿Alguien me puede ayudar a resolver este problema.

Gracias.

Respuesta

3

No se garantiza que se llame a OnDestroy(). Por lo que debe hacerlo en cualquiera o onStop

Pero el problema es cada vez los cambios de orientación como por la arquitectura Android

Hay una manera de evitar que esto suceda en el manifiesto. Estoy seguro de que alguien más publicará cómo.

+0

entiendo el Android la documentación para 'onDestroy' significa que no debe * guardar * datos allí, ya que el proceso se puede matar antes de que se llame. Sin embargo, en esa situación, también lo harán los oyentes registrados en el administrador del sensor. ¿Cuál es el daño en esto? –

+0

También debe tenerse en cuenta que 'onStop' tampoco se garantiza que se invoque. –

+0

onPause es el único garantizado. He visto instancias en las que no se llama a OnStop, por lo que cuando vuelva a la aplicación una nueva instancia de fragmento tendrá activado OnStart y se filtró un oyente (a menos que registre oyentes utilizando etiquetas de cadena y el nuevo fragmento reemplaza al oyente anterior) – James

4

Es posible que desee utilizar un Service para ejecutar la recolección de datos del acelerómetro en el fondo, comunicándose con él utilizando intenciones básicas no es demasiado complicado.

O, si sólo quiere 'sobrevivir' la rotación, cuando la actividad se destoryed y luego reconstruida, intente anular en sus Activity los métodos onRetainNonConfigurationInstance() y getLastNonConfigurationInstance() (leer mas sobre esto here)

+0

Lo resolví usando onRetainNonConfigurationInstance() y getLastNonConfigurationInstance() métodos ... gracias –

Cuestiones relacionadas