Приложение и его жизненный цикл

Роль класса App и жизненный цикл приложения

Последнее обновление: 31.10.2015

Работа приложения Windows Phone начинается с класса App, который определен в файлах App.xaml и App.xaml.cs. Класс App является входной точкой в приложение, обеспечивает управление жизненным циклом, а также управляет ресурсами, общими для всего приложения. Кроме того, в классе App можно перехватить исключения, которые могут возникнут в процессе работы.

ОС WP8.1 запускает приложение в виде класса App, а тот уже использует объект Frame для загрузки отдельных страниц Page и обеспечивает навигацию между ними.

В процессе работы приложение проходит различные этапы жизненного цикла. Обрабатывая события жизненного цикла, можно управлять работой приложения.

Жизненный цикл приложений Windows Phone 8.1 будет аналогичен жизненному циклу приложений для Windows 8.1, но в то же время он будет отличаться от жизненного цикла в Windows Phone 8.

При создании приложений надо учитывать, одновременно может быть запущено несколько приложений, но только одно из них будет активным на экране. Также одновременно может быть активной только одна страница, а единственный способ активизировать страницу - это переход на нее.

При запуске приложения объект класса App вызывает метод OnLaunched, а само приложение переходит в состояние Running. Если мы откроем в проекте файл App.xaml.cs, то мы увидим в классе App следующий метод:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
	// содержание метода
}

Когда пользователь уходит из приложения, используя кнопки Back (Назад), Start (Пуск) или кнопку поиска, то приложение приостанавливается, но окончательно не завершается. Минимальные данные о нем сохраняются в памяти в специальном хранилище под названием backstack. Приложение переходит в состояние Suspended. А объект App генерируется событие Suspending, обработчик которого также определен в файле App.xaml.cs:

public sealed partial class App : Application
{
    public App()
    {
        this.InitializeComponent();
        this.Suspending += this.OnSuspending; 
    }
	
	//...............................................

    private void OnSuspending(object sender, SuspendingEventArgs e)
    {
        var deferral = e.SuspendingOperation.GetDeferral();

        // TODO: Save application state and stop any background activity
        deferral.Complete();
    }
}

Метод OnSuspending позволяет обработать приостановку работы приложения. Мы можем определить в этом методе ряд действий, который, например, сохраняют некоторые данные приложения. В то же время надо понимать, что выполнение кода в этом методе должно происходить максимально быстро, иначе это негативно можно повлиять на UX (user experiense / опыт взаимодействия пользователя с приложением).

Если приложение было приостановлено, то мы можем вновь к нему перейти и возобновить с ним работу, например, с помощью кнопки Back (назад) или через Диспетчер задач. При возобновлении работы приложение генерирует событие Resuming. По умолчанию оно никак не обрабатывается, но мы можем добавить соответствующий обработчик в класс App:

public sealed partial class App : Application
{
    public App()
    {
        this.InitializeComponent();
        this.Suspending += this.OnSuspending;
		this.Resuming += App_Resuming;		
    }
	
    void App_Resuming(object sender, object e)
    {
        // Код для обработки возобновления работы приложения
    }
	
	//..........................................
}

Здесь опять же мы можем добавить некоторую логику, например, загрузки ранее сохраненных данных, проверку каких-то условий и т.д. Но также, как и в предыдущем случае, код должен по возможности максимально быстро работать.

Закрытие приложения

Для полного закрытия приложения WP 8 надо нажать на кнопку закрытия (крестик):

В этом случае приложение переходит в состояние ClosedByUser и удаляется из памяти.

Есть и второй вариант завершения работы приложения. Допустим, оно было приостановлено и перешло в состояние Suspended. В этот момент пользователь загружает какое-то другое приложение, которое требует много памяти. И вероятна ситуация, что ОС для освобождения необходимой памяти удалит все данные о ранее приостановленном приложении. И тогда приложение перейдет в состояние Terminated

В подобных случаях возможно ситуация, что вместе с завершением приложения ОС также удалит из памяти какие-либо важные данные, с которыми пользователь ранее работал. Кроме того, пользователь никак не будет уведомлен о полном завершении приложения. А запуская приложение вновь, пользователь ожидает увидеть те же данные, которые были до ухода из приложения. В таких случаях опять же можно сохранять данные, обрабатывая событие Suspending, а при запуске приложения загружать эти данные в приложение.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850