У меня возникли проблемы с управлением жизненным циклом моего приложения, потому что я точно не знаю, какие события и функции относятся к жизненному циклу страницы/приложения, когда. Было бы неплохо, если бы Microsoft все это где-то табулировала. Конкретно, вот что я думаю я знаю и то, что я не знаю, о поведении каждого из следующих событий/функций:Поведение страниц и приложений в Windows Phone 8.1 Время выполнения
Page.Page()
(конструктор): Запускается, когда страница создается для первой время. Не уверен, что он запускается только один раз, когда приложение запущено, или каждый раз, когда я перехожу к странице в течение одного сеанса.
Page.OnNavigatedTo()
: Выполняется при создании страницы и при каждом ее перемещении.
Page.OnNavigatedFrom()
: Выполняется, когда пользователь покидает страницу. Не запускается, когда пользователь нажимает кнопку «Пуск» или кнопку блокировки во время отображения страницы.
App.App()
(конструктор): Выполняется только один раз при запуске приложения.
App.Resuming
: Восстанавливается, когда приложение отображается в поле зрения после его свертывания/приостановки или когда пользователь открывает экран, и приложение появляется в поле зрения. Не запускается, когда приложение запускается в первый раз.
App.Suspending
: Пожар, когда пользователь нажимает кнопку «Назад» на домашней странице (т. Е. Приложение больше не отображается) и при нажатии кнопки запуска.
Все, что я пропустил или ошибся? Причина, по которой я пытаюсь быть уверенным, заключается в том, что у моего приложения есть страница, на которой работает фоновый аудиоплеер, который, в свою очередь, нуждается в тщательно управляемой системе подписки на события/без подписки, и он часто ведет себя неловко, если я нажимаю кнопку «Пуск» на этой странице , И еще одна проблема заключается в том, что у меня есть статический объект в моем приложении App.xaml.cs, который я использую в приложении, и который предоставляет некоторые события. Сейчас я подписавшись/отпиской на события на каждой странице, как так:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
App.globalObject.Event1 += Event1_handler;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
App.globalObject.Event1 -= Event1_handler;
}
Но я не уверен, если это правильный подход (очевидно, я пытаюсь убедиться, что я только подписался событие один раз, чтобы избежать обработки обработчика событий несколько раз). Должен ли я просто подписаться на событие один раз в конструкторе страницы?
Редактировать: Я использую шаблон проекта с включенными классами SuspensionManager
и NavigationHelper
, в случае если что-либо изменит.
Конструктор страниц может работать или не запускаться несколько раз, в зависимости от того, как настроен режим кэширования для этой страницы. –
Как обеспечить, чтобы обработчик событий был присоединен только один раз, если у меня есть необходимое кеширование? Я пробовал практически все возможные комбинации, и я все еще получаю дубликаты вложений. – Ali250
Вы всегда можете отказаться от подписки перед подпиской. Что-то вроде: App.globalObject.Event1 - = Event1_handler; App.globalObject.Event1 + = Event1_handler; –