Цель работы: ознакомиться с особенностями событий жизненного цикла приложения и их обработки
Платформа Windows Phone 8 отличается некоторыми особенностями в организации взаимодействия пользователя и приложения. Понимание этих особенностей является залогом успешной разработки приложения, соответствующего ожиданиям пользователей и имеющего высокие шансы на публикацию в Магазине.
Обычно пользователь запускает приложения либо из списка приложений, либо – с домашнего экрана (рабочего стола), при условии, что он предварительно разместил на домашнем экране плитку приложения. Это можно сделать, вызвав контекстное меню приложения в списке длительным касанием пункта, соответствующего приложению, и выбрать в нём команду На рабочий стол. В общем списке приложений нет игр – их можно найти в хабе Игры. Плитки для вызова игр так же можно добавлять на домашний экран. Приложение может быть запущено и другими способами. Например – с помощью всплывающего уведомления, из хабов Фотографии, Музыка+Видео, с помощью ассоциации с типом файлов, его может напрямую запустить другое приложение. Различные способы запуска приложений называют точками расширения (extensibility points) – то есть – местами в системе, в которых приложения расширяют возможности системы.
В Windows Phone 8 появилась новая функция – Детская. Она создана специально для того, чтобы владелец телефона мог передать его ребенку, предоставив лишь ограниченный набор функций и не опасаясь, что ребенок случайно выполнит какие-либо действия, которые приведут, например, к удалению важных данных. Вход в обычный режим работы можно защитить паролем, в Детскую можно добавлять приложения и игры, используя команду их контекстного меню Добавить в детскую.
При работе в Windows Phone 8 активным, то есть – видимым на экране и занимающим всю площадь экрана (либо всю без исключения, либо с выводом информационной панели устройства в верхней части экрана, где отображаются сведения о времени, уровне сигнала сотовой сети и т.д.). В системе могут одновременно работать различные приложения (например, фоновые процессы), однако активным приложением может быть лишь одно. Мобильные платформы отличаются ограниченностью ресурсов, такой подход позволяет предоставлять активному приложению максимум системных ресурсов. Активное приложение может инициировать запуск другого приложения. Например, для открытия гиперссылки, расположенной в приложении, ведущей на интернет-ресурс, можно использовать стандартный браузер Internet Explorer.
В некоторых случаях экран активного приложения может быть перекрыт другими элементами, например, при поступлении звонка во время работы с приложением в подобной ситуации приложение не закрывается, однако, оно может отреагировать на неё.
Особую роль в работе с приложениями имеют аппаратные кнопки устройства. Часто они реализуются в виде сенсорных кнопок, однако, место их расположения, порядок расположения и функции неизменны от устройства к устройству. Так, пользователь, в любой момент работы с приложением, может нажать кнопку Пуск (Start), которая расположена в центре панели аппаратных кнопок. По нажатию на эту кнопку должен быть открыт домашний экран устройства. Для того, чтобы вернуться к приложению, из которого пользователь попал на начальный экран, нажав кнопку Пуск, он может нажать на кнопку Назад (Back). Длительное нажатие на данную кнопку приводит к выводу прокручиваемого списка недавно запущенных приложений. В итоге оказывается, что функция выхода из приложения на практике реализуется либо путём перехода на начальный экран, либо – с использованием кнопки Назад. При этом кнопка Назад, при перемещении по страницам приложения, используется для навигации по ним, для возврата к ранее открытым страницам. Структура навигации по приложению может быть любой, однако, чем проще и понятней она будет, тем удобнее пользователю будет работать с приложением. Как правило, все ситуации, которые требуют возврата на предыдущие страницы, а так же – выход из приложения – реализуются с помощью кнопки Назад. Выход из приложения обычно осуществляется с его начальной страницы, при нажатии на кнопку Назад.
Подобный опыт взаимодействия, в частности, отражен в системных приложениях. Пользователь, на уровне мышечной памяти, привыкает к подобному поведению приложений, поэтому, хотя технически вполне возможно создать интерфейс приложения, содержащий элементы для выхода из приложения, или кнопку, аналогичную кнопке Назад, делать этого не стоит.
Нужно учитывать, что взаимодействие с приложениями для Windows Phone ведется, преимущественно, с использованием сенсорного экрана. Экран поддерживает несколько точек касания, жесты, предусматривающие перемещение пальцев по экрану, на практике обычно используются жесты, поддерживающие не более двух точек касания (жест изменения масштаба, в частности). Можно, хотя и нежелательно, реализовать управление приложением нестандартным способом, например, жестом касания экрана сразу тремя пальцами. Однако, если, жест масштабирования, обычное касание – для выполнения какого-либо действия, длительное касание – для получения дополнительных сведений или вызова контекстного меню – это привычные и понятные всем жесты, то к подобному управлению пользователям придётся привыкать. Нет никакой гарантии, что именно непривычное управление приложением станет аргументов в пользу выбора ими приложения-конкурента. Особенность мобильных платформ, кроме того, заключается в доступности разработчику встроенных сенсоров, регистрирующих положение устройства в пространстве и его перемещения. Творческое использование этих возможностей позволяет создавать замечательные приложения. Здесь, однако, как и в случае с дизайном приложений, важно, чтобы приложение было удобным для пользователя.
Пользователь, если он вернулся в приложение, из которого недавно вышел, обычно ожидает, что оно будет пребывать в том же состоянии, в котором было до выхода. Например, вполне вероятен такой сценарий работы с приложением. Пользователю, который работает с приложением, нужно срочно сделать звонок, написать текстовое сообщение, или воспользоваться другим приложением. Во время работы он, например, вводит в приложение какие-то данные. Пользователь прерывает работу, нажимает на кнопку Пуск, выполняет то, что ему нужно, и снова возвращается в приложение – либо запуская его с домашнего экрана, либо пользуясь длительным нажатием на кнопку Назад и выбирая его из списка, если оно всё еще доступно в этом списке. Если приложение откроется, но введенные ранее данные будут утеряны – это разочарует пользователя. Лучше всего, когда приложение создаёт у пользователя впечатление непрерывной работы этого приложения, то есть – возвращаясь к нему, он видит его в том же состоянии, в котором оно было в момент выхода. При этом очень желательно, чтобы пользователю не пришлось прилагать дополнительных усилий для обеспечения подобного поведения приложения. Пользователю не важны технические детали. Всё, что ему нужно – это полезное, удобное и быстрое приложение. Для того, чтобы реализовать функциональность, касающуюся запуска приложения, выхода из него, загрузки предыдущих состояний, нужно ознакомиться с особенностями жизненного цикла приложения и с обработкой событий, связанных с ним.
В ходе взаимодействия приложений для Windows Phone с пользователем и системой оно проходит через различные состояния, имея возможность реагировать на их смену, обрабатывая соответствующие события. В файле App.xaml, который входит в стандартный проект приложения для Windows Phone, по умолчанию, оформлена подписка на четыре события жизненного цикла приложения. Это – события Launching, Closing, Activated, Decativated (Листинг 9.1). Пустые обработчики событий расположены в файле кода App.xaml.cs.
<Application.ApplicationLifetimeObjects>
<!--Обязательный объект, обрабатывающий события времени жизни приложения-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
// Код для выполнения при запуске приложения (например, из меню "Пуск")
// Этот код не будет выполняться при повторной активации приложения
private void Application_Launching(object sender, LaunchingEventArgs e)
{
}
// Код для выполнения при активации приложения (переводится в основной режим)
// Этот код не будет выполняться при первом запуске приложения
private void Application_Activated(object sender, ActivatedEventArgs e)
{
}
// Код для выполнения при деактивации приложения (отправляется в фоновый режим)
// Этот код не будет выполняться при закрытии приложения
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
}
// Код для выполнения при закрытии приложения
// (например, при нажатии пользователем кнопки "Назад")
// Этот код не будет выполняться при деактивации приложения
private void Application_Closing(object sender, ClosingEventArgs e)
{
}
Рассмотрим особенности обработки этих событий.
Launching. Когда пользователь запускает приложение, например с начального экрана телефона, выполняется данное событие. Не каждый запуск приложения приводит к его выполнению, так как если приложение было некоторое время назад запущено и пребывает в фоновом режиме и пользователь попытается вернуться к нему, это событие выполнено не будет. При обработке этого события можно произвести начальную инициализацию свойств приложения, например, загрузив настройки, сохранённые ранее в хранилище данных приложения, произвести попытку подключения к веб-службе, выполнить другие подготовительные действия. Однако, хотя обработчик данного события и является наиболее очевидным местом для выполнения подобных задач, следует максимально сократить нагрузку, которая на него возлагается. Здесь следует выполнять лишь те задачи, без которых приложение попросту неработоспособно, то есть – не может корректно отобразить первую страницу. Кроме того, если запуск приложения окажется слишком длительным, оно не пройдёт сертификацию в Магазине. Поэтому задачи, которые могут занимать довольно много времени (например – вышеупомянутое подключение к сетевым службам) лучше выполнять сразу же после запуска приложения, предоставив пользователю некоторый функционал. Эти задачи можно выполнять в фоновых процессах, что позволит сохранить высокую скорость отклика интерфейса приложения.
После того, как приложение запущено, оно переходит в состояние исполнения (Running), то есть – выполнения своих основных задач. Обратите внимание на то, что активное приложение может оказаться в ситуации простоя (idle), когда, например, пользователь заблокирует экран устройства, или интерфейс приложения будет перекрыт другими элементами. Из соображений экономии заряда батарей телефона подобную ситуацию следует корректно обрабатывать (здесь можно найти подробности об этом: http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff941090%28v=vs.105%29.aspx). Например, в режиме простоя приложение может прекратить использование энергоёмких функций, отключить анимацию. Когда обнаружено, что пользователь снова готов работать с приложением (например, когда разблокирован экран устройства, при условии, что в приложении отключено обнаружение простоя приложения, так как если данная функция включена, приложение деактивируется при блокировке устройства), приостановленные функции можно вновь активировать.
Deactivated. Деактивация приложения происходит при различных обстоятельствах. Например, при блокировке устройства (при условии, что включено обнаружение простоя приложения), при запуске приложением другого приложения (например, веб-браузера для открытия гиперссылки на веб-ресурс). После деактивации пользователь может вернуться в приложение, тогда будет выполнено событие Activated, а может и не вернуться – поэтому при деактивации следует выполнить действия по сохранению данных приложения. При этом при обработке данного события желательно так же не перегружать его, его следует обработать как можно быстрее. Поэтому, если окажется, что в приложении при деактивации нужно выполнять какие-либо ресурсоёмкие операции, имеет смысл рассмотреть вариант выполнения этих операций в процессе работы приложения. Например, периодически выполняя сохранение каких-либо данных, чтобы при деактивации не пришлось выполнять слишком большого объема работ.
Activated. Если приложение было деактивировано и пользователь снова возвращается к нему, вызывается это событие. При этом, хотя внешне это может выглядеть как повторный запуск приложения, событие Launching не вызывается. Здесь можно проверить состояние приложения, при необходимости загрузить сохранённые ранее данные.
Closing. Событие закрытия приложения. Вызывается, например, когда пользователь закрывает приложение, нажимая кнопку Назад, находясь на его начальной странице. Здесь следует сохранить состояние приложения, руководствуясь теми же соображениями, что и при обработке события Deactivated.
Вышеописанные события относятся к приложению в целом. Для того, чтобы реагировать на перемещения пользователя по страницам приложения, можно воспользоваться методами страниц приложения OnNavigatedTo (переход на страницу) и OnNavigatedFrom (переход со страницы). Эти виртуальные методы можно переопределить в программных файлах кода, имеющихся на странице и пользоваться ими, например, для сохранения каких-либо данных страниц, которые должны быть доступны другим страницам, для проверки данных, которые пользователь ввёл на странице и т.д.
Для того, чтобы освоить обработку событий жизненного цикла приложения, можно воспользоваться простым приложением (его можно найти в папке дополнительных материалов к занятию, в проекте L4_1). Приложение выводит отладочные сообщения при перемещении по его страницам, при их загрузке и при вызове событий жизненного цикла приложения.
В приложении есть две страницы, одна из которых – MainPage – является начальной страницей, загружаемой после запуска приложения. На странице MainPage есть ссылка для перехода на страницу Page1, которая не содержит дополнительных элементов управления. На рис. 9.1. приведено окно Visual Studio в виде, который оно имеет после успешных испытаний приложения. В частности, обратите внимание на окно Вывод (его можно открыть командой Просмотреть > Вывод) – именно в него и выводятся отладочные сообщения.
(рис 9.1) Приложение для исследования событий жизненного цикла приложения
Обработчики событий жизненного цикла приложения в файле App.xaml.cs приведены к следующему виду (Листинг 9.3.)
private void Application_Launching(object sender, LaunchingEventArgs e)
{
Debug.WriteLine("Событие Launching");
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
Debug.WriteLine("Событие Activated");
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
Debug.WriteLine("Событие Deactivated");
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
Debug.WriteLine("Событие Closing");
}
В Листинге 9.4 показан код для страницы MainPage. Здесь отладочные сообщения выводятся при создании экземпляра страницы, при переходе на страницу и при уходе с неё. Аналогичный код обеспечивает вывод подобных сообщений для страницы Page1.
using Microsoft.Phone.Controls;
using System.Diagnostics;
using System.Windows.Navigation;
namespace L4_1
{
public partial class MainPage : PhoneApplicationPage
{
// Конструктор
public MainPage()
{
InitializeComponent();
Debug.WriteLine("Загружена страница 1");
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Debug.WriteLine("Переход на страницу 1");
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Debug.WriteLine("Уход со страницы 1");
base.OnNavigatedFrom(e);
}
}
}
В этой лекции мы рассмотрели особенности взаимодействия системы и пользователя с приложениями для Windows Phone. Кроме того, мы описали события жизненного цикла приложения и особенности их обработки. Правильная обработка событий жизненного цикла приложения и понимание особенностей взаимодействия пользователя с приложением и операционной системы Windows Phone с приложением позволяет заложить основу для разработки надёжных программных продуктов, у которых есть шансы произвести хорошее впечатление на пользователя.
Запустите учебное приложение, имеющееся в дополнительных материалах к лекции, либо на эмуляторе, либо на реальном устройстве (в режиме отладки, с подключением к компьютеру) и убедитесь, что вам понятны особенности вызова событий жизненного цикла приложения.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Цель работы: ознакомиться с особенностями событий жизненного цикла приложения и их обработки
Платформа Windows Phone 8 отличается некоторыми особенностями в организации взаимодействия пользователя и приложения. Понимание этих особенностей является залогом успешной разработки приложения, соответствующего ожиданиям пользователей и имеющего высокие шансы на публикацию в Магазине.
Обычно пользователь запускает приложения либо из списка приложений, либо – с домашнего экрана (рабочего стола), при условии, что он предварительно разместил на домашнем экране плитку приложения. Это можно сделать, вызвав контекстное меню приложения в списке длительным касанием пункта, соответствующего приложению, и выбрать в нём команду На рабочий стол. В общем списке приложений нет игр – их можно найти в хабе Игры. Плитки для вызова игр так же можно добавлять на домашний экран. Приложение может быть запущено и другими способами. Например – с помощью всплывающего уведомления, из хабов Фотографии, Музыка+Видео, с помощью ассоциации с типом файлов, его может напрямую запустить другое приложение. Различные способы запуска приложений называют точками расширения (extensibility points) – то есть – местами в системе, в которых приложения расширяют возможности системы.
В Windows Phone 8 появилась новая функция – Детская. Она создана специально для того, чтобы владелец телефона мог передать его ребенку, предоставив лишь ограниченный набор функций и не опасаясь, что ребенок случайно выполнит какие-либо действия, которые приведут, например, к удалению важных данных. Вход в обычный режим работы можно защитить паролем, в Детскую можно добавлять приложения и игры, используя команду их контекстного меню Добавить в детскую.
При работе в Windows Phone 8 активным, то есть – видимым на экране и занимающим всю площадь экрана (либо всю без исключения, либо с выводом информационной панели устройства в верхней части экрана, где отображаются сведения о времени, уровне сигнала сотовой сети и т.д.). В системе могут одновременно работать различные приложения (например, фоновые процессы), однако активным приложением может быть лишь одно. Мобильные платформы отличаются ограниченностью ресурсов, такой подход позволяет предоставлять активному приложению максимум системных ресурсов. Активное приложение может инициировать запуск другого приложения. Например, для открытия гиперссылки, расположенной в приложении, ведущей на интернет-ресурс, можно использовать стандартный браузер Internet Explorer.
В некоторых случаях экран активного приложения может быть перекрыт другими элементами, например, при поступлении звонка во время работы с приложением в подобной ситуации приложение не закрывается, однако, оно может отреагировать на неё.
Особую роль в работе с приложениями имеют аппаратные кнопки устройства. Часто они реализуются в виде сенсорных кнопок, однако, место их расположения, порядок расположения и функции неизменны от устройства к устройству. Так, пользователь, в любой момент работы с приложением, может нажать кнопку Пуск (Start), которая расположена в центре панели аппаратных кнопок. По нажатию на эту кнопку должен быть открыт домашний экран устройства. Для того, чтобы вернуться к приложению, из которого пользователь попал на начальный экран, нажав кнопку Пуск, он может нажать на кнопку Назад (Back). Длительное нажатие на данную кнопку приводит к выводу прокручиваемого списка недавно запущенных приложений. В итоге оказывается, что функция выхода из приложения на практике реализуется либо путём перехода на начальный экран, либо – с использованием кнопки Назад. При этом кнопка Назад, при перемещении по страницам приложения, используется для навигации по ним, для возврата к ранее открытым страницам. Структура навигации по приложению может быть любой, однако, чем проще и понятней она будет, тем удобнее пользователю будет работать с приложением. Как правило, все ситуации, которые требуют возврата на предыдущие страницы, а так же – выход из приложения – реализуются с помощью кнопки Назад. Выход из приложения обычно осуществляется с его начальной страницы, при нажатии на кнопку Назад.
Подобный опыт взаимодействия, в частности, отражен в системных приложениях. Пользователь, на уровне мышечной памяти, привыкает к подобному поведению приложений, поэтому, хотя технически вполне возможно создать интерфейс приложения, содержащий элементы для выхода из приложения, или кнопку, аналогичную кнопке Назад, делать этого не стоит.
Нужно учитывать, что взаимодействие с приложениями для Windows Phone ведется, преимущественно, с использованием сенсорного экрана. Экран поддерживает несколько точек касания, жесты, предусматривающие перемещение пальцев по экрану, на практике обычно используются жесты, поддерживающие не более двух точек касания (жест изменения масштаба, в частности). Можно, хотя и нежелательно, реализовать управление приложением нестандартным способом, например, жестом касания экрана сразу тремя пальцами. Однако, если, жест масштабирования, обычное касание – для выполнения какого-либо действия, длительное касание – для получения дополнительных сведений или вызова контекстного меню – это привычные и понятные всем жесты, то к подобному управлению пользователям придётся привыкать. Нет никакой гарантии, что именно непривычное управление приложением станет аргументов в пользу выбора ими приложения-конкурента. Особенность мобильных платформ, кроме того, заключается в доступности разработчику встроенных сенсоров, регистрирующих положение устройства в пространстве и его перемещения. Творческое использование этих возможностей позволяет создавать замечательные приложения. Здесь, однако, как и в случае с дизайном приложений, важно, чтобы приложение было удобным для пользователя.
Пользователь, если он вернулся в приложение, из которого недавно вышел, обычно ожидает, что оно будет пребывать в том же состоянии, в котором было до выхода. Например, вполне вероятен такой сценарий работы с приложением. Пользователю, который работает с приложением, нужно срочно сделать звонок, написать текстовое сообщение, или воспользоваться другим приложением. Во время работы он, например, вводит в приложение какие-то данные. Пользователь прерывает работу, нажимает на кнопку Пуск, выполняет то, что ему нужно, и снова возвращается в приложение – либо запуская его с домашнего экрана, либо пользуясь длительным нажатием на кнопку Назад и выбирая его из списка, если оно всё еще доступно в этом списке. Если приложение откроется, но введенные ранее данные будут утеряны – это разочарует пользователя. Лучше всего, когда приложение создаёт у пользователя впечатление непрерывной работы этого приложения, то есть – возвращаясь к нему, он видит его в том же состоянии, в котором оно было в момент выхода. При этом очень желательно, чтобы пользователю не пришлось прилагать дополнительных усилий для обеспечения подобного поведения приложения. Пользователю не важны технические детали. Всё, что ему нужно – это полезное, удобное и быстрое приложение. Для того, чтобы реализовать функциональность, касающуюся запуска приложения, выхода из него, загрузки предыдущих состояний, нужно ознакомиться с особенностями жизненного цикла приложения и с обработкой событий, связанных с ним.
В ходе взаимодействия приложений для Windows Phone с пользователем и системой оно проходит через различные состояния, имея возможность реагировать на их смену, обрабатывая соответствующие события. В файле App.xaml, который входит в стандартный проект приложения для Windows Phone, по умолчанию, оформлена подписка на четыре события жизненного цикла приложения. Это – события Launching, Closing, Activated, Decativated (Листинг 9.1). Пустые обработчики событий расположены в файле кода App.xaml.cs.
<Application.ApplicationLifetimeObjects>
<!--Обязательный объект, обрабатывающий события времени жизни приложения-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
// Код для выполнения при запуске приложения (например, из меню "Пуск")
// Этот код не будет выполняться при повторной активации приложения
private void Application_Launching(object sender, LaunchingEventArgs e)
{
}
// Код для выполнения при активации приложения (переводится в основной режим)
// Этот код не будет выполняться при первом запуске приложения
private void Application_Activated(object sender, ActivatedEventArgs e)
{
}
// Код для выполнения при деактивации приложения (отправляется в фоновый режим)
// Этот код не будет выполняться при закрытии приложения
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
}
// Код для выполнения при закрытии приложения
// (например, при нажатии пользователем кнопки "Назад")
// Этот код не будет выполняться при деактивации приложения
private void Application_Closing(object sender, ClosingEventArgs e)
{
}
Рассмотрим особенности обработки этих событий.
Launching. Когда пользователь запускает приложение, например с начального экрана телефона, выполняется данное событие. Не каждый запуск приложения приводит к его выполнению, так как если приложение было некоторое время назад запущено и пребывает в фоновом режиме и пользователь попытается вернуться к нему, это событие выполнено не будет. При обработке этого события можно произвести начальную инициализацию свойств приложения, например, загрузив настройки, сохранённые ранее в хранилище данных приложения, произвести попытку подключения к веб-службе, выполнить другие подготовительные действия. Однако, хотя обработчик данного события и является наиболее очевидным местом для выполнения подобных задач, следует максимально сократить нагрузку, которая на него возлагается. Здесь следует выполнять лишь те задачи, без которых приложение попросту неработоспособно, то есть – не может корректно отобразить первую страницу. Кроме того, если запуск приложения окажется слишком длительным, оно не пройдёт сертификацию в Магазине. Поэтому задачи, которые могут занимать довольно много времени (например – вышеупомянутое подключение к сетевым службам) лучше выполнять сразу же после запуска приложения, предоставив пользователю некоторый функционал. Эти задачи можно выполнять в фоновых процессах, что позволит сохранить высокую скорость отклика интерфейса приложения.
После того, как приложение запущено, оно переходит в состояние исполнения (Running), то есть – выполнения своих основных задач. Обратите внимание на то, что активное приложение может оказаться в ситуации простоя (idle), когда, например, пользователь заблокирует экран устройства, или интерфейс приложения будет перекрыт другими элементами. Из соображений экономии заряда батарей телефона подобную ситуацию следует корректно обрабатывать (здесь можно найти подробности об этом: http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff941090%28v=vs.105%29.aspx). Например, в режиме простоя приложение может прекратить использование энергоёмких функций, отключить анимацию. Когда обнаружено, что пользователь снова готов работать с приложением (например, когда разблокирован экран устройства, при условии, что в приложении отключено обнаружение простоя приложения, так как если данная функция включена, приложение деактивируется при блокировке устройства), приостановленные функции можно вновь активировать.
Deactivated. Деактивация приложения происходит при различных обстоятельствах. Например, при блокировке устройства (при условии, что включено обнаружение простоя приложения), при запуске приложением другого приложения (например, веб-браузера для открытия гиперссылки на веб-ресурс). После деактивации пользователь может вернуться в приложение, тогда будет выполнено событие Activated, а может и не вернуться – поэтому при деактивации следует выполнить действия по сохранению данных приложения. При этом при обработке данного события желательно так же не перегружать его, его следует обработать как можно быстрее. Поэтому, если окажется, что в приложении при деактивации нужно выполнять какие-либо ресурсоёмкие операции, имеет смысл рассмотреть вариант выполнения этих операций в процессе работы приложения. Например, периодически выполняя сохранение каких-либо данных, чтобы при деактивации не пришлось выполнять слишком большого объема работ.
Activated. Если приложение было деактивировано и пользователь снова возвращается к нему, вызывается это событие. При этом, хотя внешне это может выглядеть как повторный запуск приложения, событие Launching не вызывается. Здесь можно проверить состояние приложения, при необходимости загрузить сохранённые ранее данные.
Closing. Событие закрытия приложения. Вызывается, например, когда пользователь закрывает приложение, нажимая кнопку Назад, находясь на его начальной странице. Здесь следует сохранить состояние приложения, руководствуясь теми же соображениями, что и при обработке события Deactivated.
Вышеописанные события относятся к приложению в целом. Для того, чтобы реагировать на перемещения пользователя по страницам приложения, можно воспользоваться методами страниц приложения OnNavigatedTo (переход на страницу) и OnNavigatedFrom (переход со страницы). Эти виртуальные методы можно переопределить в программных файлах кода, имеющихся на странице и пользоваться ими, например, для сохранения каких-либо данных страниц, которые должны быть доступны другим страницам, для проверки данных, которые пользователь ввёл на странице и т.д.
Для того, чтобы освоить обработку событий жизненного цикла приложения, можно воспользоваться простым приложением (его можно найти в папке дополнительных материалов к занятию, в проекте L4_1). Приложение выводит отладочные сообщения при перемещении по его страницам, при их загрузке и при вызове событий жизненного цикла приложения.
В приложении есть две страницы, одна из которых – MainPage – является начальной страницей, загружаемой после запуска приложения. На странице MainPage есть ссылка для перехода на страницу Page1, которая не содержит дополнительных элементов управления. На рис. 9.1. приведено окно Visual Studio в виде, который оно имеет после успешных испытаний приложения. В частности, обратите внимание на окно Вывод (его можно открыть командой Просмотреть > Вывод) – именно в него и выводятся отладочные сообщения.
(рис 9.1) Приложение для исследования событий жизненного цикла приложения
Обработчики событий жизненного цикла приложения в файле App.xaml.cs приведены к следующему виду (Листинг 9.3.)
private void Application_Launching(object sender, LaunchingEventArgs e)
{
Debug.WriteLine("Событие Launching");
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
Debug.WriteLine("Событие Activated");
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
Debug.WriteLine("Событие Deactivated");
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
Debug.WriteLine("Событие Closing");
}
В Листинге 9.4 показан код для страницы MainPage. Здесь отладочные сообщения выводятся при создании экземпляра страницы, при переходе на страницу и при уходе с неё. Аналогичный код обеспечивает вывод подобных сообщений для страницы Page1.
using Microsoft.Phone.Controls;
using System.Diagnostics;
using System.Windows.Navigation;
namespace L4_1
{
public partial class MainPage : PhoneApplicationPage
{
// Конструктор
public MainPage()
{
InitializeComponent();
Debug.WriteLine("Загружена страница 1");
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Debug.WriteLine("Переход на страницу 1");
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Debug.WriteLine("Уход со страницы 1");
base.OnNavigatedFrom(e);
}
}
}
В этой лекции мы рассмотрели особенности взаимодействия системы и пользователя с приложениями для Windows Phone. Кроме того, мы описали события жизненного цикла приложения и особенности их обработки. Правильная обработка событий жизненного цикла приложения и понимание особенностей взаимодействия пользователя с приложением и операционной системы Windows Phone с приложением позволяет заложить основу для разработки надёжных программных продуктов, у которых есть шансы произвести хорошее впечатление на пользователя.
Запустите учебное приложение, имеющееся в дополнительных материалах к лекции, либо на эмуляторе, либо на реальном устройстве (в режиме отладки, с подключением к компьютеру) и убедитесь, что вам понятны особенности вызова событий жизненного цикла приложения.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.