¿Existe una mejor práctica para manejar apropiadamente el tombstoning y la tecla de retroceso?¿Manejar apropiadamente las palabras Tombstoning y Back por motivos de rendimiento?
Como se indica en el documento de MSDN, debe guardar los datos transitorios en el método OnNavigatedFrom
. Ok, entonces el código para guardar los estados cuando se desembarca es claro.
Pero ahora si presiona la tecla Atrás también se llama al método OnNavigatedFrom
y si no agrega comprobaciones adicionales, primero guardará los estados en el diccionario y poco después se destruirá la página. Y también lo hará el diccionario PhoneApplicationPage.State. Entonces, el código de guardado es completamente CPU, disco y tiempo de batería perdidos.
Esto es lo que he hecho para prevenirlo:
protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
// when navigating back
if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back)
{
backKeyPressed = true;
}
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
if (backKeyPressed)
{
// Don't save states on back key!
backKeyPressed = false; // set it anyway
return;
}
// Tombstoning
// save objects
this.SaveState("text", someText);
...
}
Como recordatorio: OnNavigatingFrom
solamente se llamará cuando se navega fuera/atrás de la página, pero no cuando la aplicación se extingue.
Nota al pie: el código mostrado solo cubre las páginas que solo pueden retroceder. Es por eso que agregué backKeypressed al OnNavigatingFrom
. Necesita controles adicionales si la página puede navegar a otra página.
- ¿Hay alguna forma mejor de hacerlo en cada página que crees?
- Ahora, ¿realmente tengo que agregar la variable
backKeyPressed
y verificar en cada página que creo? - ¿No debería el framework proporcionarnos algo para nosotros, por lo que no tenemos que preocuparnos demasiado por esto?
¿Qué piensas sobre esto?
EDIT:
pregunta Actualizado el que sea más claro.
Gracias por la pista con NavigationMode. Sería bueno si este comportamiento se simplificará en el futuro. Algo así como: agregar NavigationMode a OnNavigatedFrom o un nuevo método propio para tombstoning o algo así. Entonces no tendremos que usar una variable backKeyPressed separada. – Buju
Sí, eso está en la lista de pendientes :-) –
¡gracias! :) – Buju