Есть ли лучшая практика для правильной обработки надгробий и клавиш возврата?
Как указано в документе MSDN, вы должны сохранять временные данные в методе OnNavigatedFrom
. Итак, код для сохранения состояний при захоронении ясен.
Но теперь, если вы нажмете клавишу возврата, также будет вызван метод OnNavigatedFrom
, и если вы не добавите дополнительные проверки, вы сначала сохраните состояния в словаре, а вскоре после этого страница будет уничтожена. И так будет словарь PhoneApplicationPage.State. Таким образом, код сохранения - это полностью потраченное впустую время процессора, диска и аккумулятора .
Вот что я сделал, чтобы предотвратить это:
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);
...
}
В качестве напоминания: OnNavigatingFrom
будет вызываться только при переходе назад / назад со страницы, но не при захоронении приложения.
Примечание: указанный код охватывает только страницы, на которые можно перейти только назад. Вот почему я добавил backKeypressed к OnNavigatingFrom
. Вам нужны дополнительные проверки, если страница может перейти на другую страницу.
- Есть ли лучший способ сделать это для каждой создаваемой страницы?
- Теперь мне действительно нужно добавить переменную
backKeyPressed
и проверять каждую страницу, которую я создаю?
- Разве фреймворк не должен предоставить нам что-то для разработчика, чтобы нам не пришлось об этом беспокоиться?
Что вы думаете об этом?
EDIT:
Обновлен вопрос, чтобы сделать его понятнее.