Жизненный цикл приложения uwp

Жизненный цикл приложения uwp thumbnail

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

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

Приложение может пребывать в пяти различных состояниях:

  • NotRunning: это состояние возникает, когда пользователь впервые активирует приложение при его установки из магазина, либо когда пользователь закрывает приложение через диспетчер задач, либо завершает его работу,
    выключая компьютер или осуществляя выход из системы

  • Running: приложение запущено, и пользователь с ним взаимодействует

  • Suspended: работа приложения приостановлена, оно не активно

  • Terminated: работа приложения завершается. Переход в это состояние может быть произведен ОС Windows, если к примеру,
    приложение уже находится в приостановленном состоянии Suspended, но в связи с нехваткой памяти для других приложений оно переходится в состояние Terminated

  • ClosedByUser: состояние возникает при закрытии пользователем приложения на крестик или по нажатию клавиш Alt+F4

Переходы из одного состояния в другое можно описать следующей схемой:

Первоначально приложение находится в состоянии NotRunning, оно не работает, и пользователь с ним не взаимодействует. Но вот пользователь
нажимает на соответствующий значок или квадратик приложения, и приложение начинает запускаться, класс App, который представляет приложение, начинает работать.
Вначале в этом классе вызывается метод OnLaunched(). Если приложение ранее было приостановлено, но пользователь вернулся к нему,
то у него также вызывается метод OnLaunched(). Стандартное определение метода OnLaunched:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;

if (rootFrame == null)
{
rootFrame = new Frame();

rootFrame.NavigationFailed += OnNavigationFailed;

if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}

Window.Current.Content = rootFrame;
}

if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
Window.Current.Activate();
}
}

При вызове метода ему передается параметр типа LaunchActivatedEventArgs, который содержит информацию
о предыдущем состоянии приложения, а также аргументы активации. Данный параметр может играть большое значение. Так, когда пользователь вызывает приложение,
которое ранее было завершено системой и перешло в состояние Terminated, или которое было завершено пользователем и перешло в состояние ClosedByUser, то
свойство PreviousExecutionState этого параметра имеет значения ApplicationExecutionState.Terminated или ApplicationExecutionState.ClosedByUser.
А свойство Kind имеет значение ActivationKind.Launch.

Если предыдущее состояние равно ApplicationExecutionState.Terminated, то, возможно, имеет смысл загрузить ранее сохраненные данные. Собственно поэтому по умолчанию
в код метода OnLaunched добавлена следующая конструкция:

if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}

Если же предыдущее состояние приложения было NotRunning, то приложение фактически стартует с чистого листа. То есть разработчик может быть уверен, что
предыдущий запуск приложения не завершился прерыванием работы со стороны операционной системы.

После того, как сработает метод OnLaunched приложение начинает отображаться на экране, и оно переходит в состояние Running.

Сразу после того, как приложение перейдет в состояние Running, срабатывает метод OnActivated(). По умолчанию в классе App этот
метод не используется, но мы его можем переопределить. Например:

protected override void OnActivated(IActivatedEventArgs args)
{
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
// что-то сделать
}
base.OnActivated(args);
}

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

Приостановка приложения

Когда пользователь переключается на другое приложение, либо на стартовый экран, происходит приостановка приложения. Если пользователь после этого
вернется к ранее приостановленному приложению, то оно снова переходит в состояние Running. При этом переключение состояния происходит не сразу. Если пользователь переключился на другое приложение, то
система ждет несколько секунд. И если пользователь в течение этого времени не вернулся в приложение, то оно переходит в состояние Suspended.

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

При переходе приложения в состояние Suspended генерируется событие Suspending. И если мы посмотрим на определение класса App, то увидим в нем обработчик, который вызывается при переходе приложения в состояние Suspended:

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

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

// здесь код, выполняющийся при приостановке приложения

deferral.Complete();
}
}

Как правило, в обработчике OnSuspending происходит сохранение важных данных приложения, что может спасти их от потери в случае перевода приложения в
состояние Terminated. Также здесь можно освобождать некоторые ресурсы, которые могут связаны с камерой, устройствами ввода-вывода и т.д.
И, что важно, выполнение кода в этом обработчике должно занимать очень мало времени, оптимально – не более 5 секунд, так как если обработчик будет выполняться несколько секунд,
то система сочтет, что приложение перестало отвечать на запросы и должно быть переведено в состояние Terminated.

В начале в обработчике следует получить объект deferral: var deferral = e.SuspendingOperation.GetDeferral();. Этот объект позволит системе дать приложению время
на выполнение асинхроннных операций.

После выполнения всех операций мы помечаем полученную задачу как завершенную с помощью вызова deferral.Complete()

Возобновление работы

Когда пользователь возвращается к ранее приостановленному приложению, оно вновь переходит в состояние Running. При этом генерируется событие
Resuming. И если нам надо при этом выполнить некоторую логику, то мы можем обработать это событие:

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

private void App_Resuming(object sender, object e)
{
// некоторый код
}
}

Завершение работы

После окончания работы с приложением пользователь может сам закрыть приложение с помощью крестика или по нажатию на комбинацию клавиш ALT+F4.
После это приложение вначале приостанавливается, а затем завершается, переходя в состояние NotRunning. При этом приложение также генерирует событие
Suspending, которые мы можем обработать, например, чтобы сохранить состояние приложения.

Источник

В приложениях Windows Store жизненный цикл довольно похож на картинку. Он довольно простой и содержит всего 3 состояния: NotRunning – Running – Suspended

Для себя я мысленно отождествляю его с «Не копать – Копать – Перекур». Опытные работяги знают, что с перекура к работе можно уже не вернуться. Опытные разработчики сохраняют состояние приложения при событии Suspending и возвращают его впоследствии в исходное состояние при возобновлении работы приложения.

В приложениях Windows UWP (Windows 10) все точно так же, но появились новые фичи.

Давайте сначала разберем общее для 8.1 и UWP. На следующей схеме отображен жизненный цикл приложения. Также на ней показано как называются переходы между состояниями.

Немного с другой стороны жизненный процесс приложения показан на следующем рисунке:

Из состояния Suspended приложение может перейти в состояние Running или же в случае, если системе необходимы ресурсы, то работа приложения может быть завершена.

Состояния всего 3, хотя перечисление состояний ApplicationExecutionState содержит в себе больше членов: NotRunning, Running, Suspended, Terminated, ClosedByUser.

Последние 2 члена перечисления помогут нам при активации приложения получить информацию о том как приложение было завершено с помощью аргумента IActivatedEventArgs.PreviousExecutionState события OnActivated или же события OnLaunched. Если приложение работает на десктопе, то в режим Suspended оно переходит после того как пользователь сворачивает приложение. В режиме планшета приложение приостанавливается после переключения на другое приложение (в 8 и 8.1 перед приостановкой проходит несколько секунд, в 10-ке все происходит гораздо быстрее).
Вот такая вот чехарда может происходить за время, начиная с запуска и заканчивая завершением приложения:

Как вы можете догадаться исходя из этой картинки у приложения есть максимум 5 секунд, чтобы завершить свою работу перед переходом в состояние Suspended. Если вы пользуетесь Windows 10, то в диспетчере задач на закладке «Подробности» можете увидеть список процессов, а также приложений, которые на данный момент находятся в состоянии «Приостановлено», т.е. Suspended. В Windows 8.1 информацию о состоянии приложения тоже можно найти в диспетчере задач.

Читайте также:  Фз 44 жизненный цикл

Для того чтобы протестировать код Suspending и Resuming можно отобразить панель с переходами в режимы работы приложения. Для этого необходимо в меню «Вид» — «Панели инструментов» выбрать «Место отладки». И тогда с помощью вот такой панели мы сможем вызвать необходимое событие жизненного цикла.

Давайте разберем, как в коде C# сохранить состояние приложения. Сначала после инициализации приложения добавим обработчик события (метод с верной сигнатурой).

public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}

Сам метод сохранения данных выглядит так:

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

//TODO: Сохранить состояние приложения и остановить все фоновые операции. Например, так:
Windows.Storage.ApplicationData.Current.LocalSettings.Values[“NumberOfN”] = n;

deferral.Complete();
}

Обратите внимание, что код метода содержит deferral, который чем то немного подобен транзакции. Если ОС потребуется завершить работу приложения, то она будет ожидать выполнения всего кода, заключенного между объявлением deferral и его завершением. Но помните что у вас всего 5 секунд на сохранение данных.

Аналогично событию Suspending есть событие Resuming. С помощью его можно отловить событие восстановления работы приложения из состояния Suspended. Но обратите внимание, что событие Resuming произойдет только если приложение восстановлено. Если оно запущено заново, то это событие выполнено не будет, поэтому в зависимости от потребностей можно добавлять в код обработку событий OnLaunched или OnActivated (со всеми его вариациями – OnFileActivated, OnSearchActivated и т.п.).

Например, так:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{

if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey(“NumberOfN”))
{
n = (int)Windows.Storage.ApplicationData.Current.LocalSettings.Values[“NumberOfN”];
}

// ……
}

Если использовать OnLaunched или OnActivated, то можно проверить какое было прошлое состояние приложения:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{

switch (e.PreviousExecutionState)
{
case ApplicationExecutionState.Suspended:
{
// что-то делаем
break;
}
case ApplicationExecutionState.Terminated:
{
// что-то делаем
break;
}
case ApplicationExecutionState.ClosedByUser:
{
// что-то делаем
break;
}
case ApplicationExecutionState.NotRunning:
{
// что-то делаем
break;
}
}
// … какой-то последующий код
}

Все, что было сейчас написано подходит и для приложений Windows 8.1 и для приложений Windows UWP.

Теперь о том какая фича добавилась в 10-ке. Примерно вот такая схема актуальна для UWP:

Как вы можете заметить, добавилась возможность продлить процесс перехода в состояние Suspended. Как правило ненадолго, но даже пара секунд в таких случаях играет роль. В случае, если приложение находится в состоянии Extended Execution и операционная система хочет освободить ресурсы, завершив работу приложения – срабатывает Revoke – это возможность что-то сделать до того как работа приложения будет прервана. На выполнение Revoke вам дается не больше секунды. Зачем нужен Revoke если он такой короткий? Типичный пример сохранить где-либо флаг и при следующем запуске предупредить пользователя, что не все последние данные были удачно сохранены при приостановке приложения.
Кстати, если про Extended Execution уже было сказано и не раз, то некоторые тонкости почти не упоминались. Я попробовал разобраться и рассказать о них вам.

Extended Execution может быть использовано для достижения двух целей. Первая это продлить процесс сохранения настроек при событии Suspending, а вторая это использование в определенном типе приложений, у которых выполнение при Extended Execution может продолжаться бесконечно. Это например приложения, отслеживающие текущую локацию, воспроизводящие аудио или же VOIP приложения. В таком случае выполнение приложения будет чем-то подобно на background task. Оно будет происходит в фоне и не будет иметь доступ к UI. При Extended Execution необходимо обязательно указать причину по которой выполнение приложения должно быть продолжено. Это может быть ExtendedExecutionReason.LocationTracking или SavingData или Unspecified.

Продлить процесс сохранения настроек при приостановке работы приложения можно во время самого события Suspending.

private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
using (var session = new ExtendedExecutionSession())
{
session.Reason = ExtendedExecutionReason.SavingData;
session.Description = “Сохраняем данные подольше”;
session.Revoked += ExtensionRevoked;

var result = await session.RequestExtensionAsync();
if (result == ExtendedExecutionResult.Denied)
await SavingBasicData(); // занимает до 5-ех секунд
else
await SavingData(); // занимает больше времени }

deferral.Complete();
}

async Task SavingData()
{
// сохраняем данные
Windows.Storage.ApplicationData.Current.LocalSettings.Values[“NumberOfN”] = n;
// имитируем бурную деятельность
await Task.Delay(7000);
}

async Task SavingBasicData()
{
// сохраняем данные
Windows.Storage.ApplicationData.Current.LocalSettings.Values[“NumberOfN”] = n;
// имитируем чуть менее бурную деятельность
await Task.Delay(4000);
}

private void ExtensionRevoked(object sender, ExtendedExecutionRevokedEventArgs args)
{
// если система пожелала освободить ресурсы и прервала Extended Execution
}

Этот способ позволяет нам продлить процесс «засыпания» приложения для того чтобы сохранить все требуемые данные.

Второй способ позволяет нам продлить выполнение кода приложения, внеся код заранее специальным запросом (не в OnSuspending). Желательно выполнять запрос как можно раньше, например в событии OnNavigatedTo() или в Loaded().

Этот способ немного похож на background task, так как при нем приложение работает долго, если не сказать всегда. Это как раз способ для приложений с отслеживанием геолокации и подобных. Таких приложений одновременно в системе может выполняться ограниченное количество, так что при регистрации Extended Execution возможен отказ.

Довольно хороший пример я нашел здесь: The new background features in Windows 10 Разобрался с ним, опробовал, и сейчас расскажу вам.

Для того чтобы работать с геолокацией нам нужно будет в манифесте приложения на закладке «Возможности» поставить галочку напротив пункта «Расположение». После этого начнем с того, что в MainPage добавим ссылки на пространства имен:

using Windows.Devices.Geolocation;
using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.ApplicationModel.ExtendedExecution;

После чего добавим переменную в область видимости класса:

ExtendedExecutionSession _session;

В XAML файл в самый первый тэг Page добавляем Loaded=«Page_Loaded». И далее в коде метода Page_Loaded:

private async void Page_Loaded(object sender, RoutedEventArgs e)
{

if (_session == null)
{
_session = new ExtendedExecutionSession { Reason = ExtendedExecutionReason.LocationTracking };
_session.Description = “Определяем местонахождение”;

if (await _session.RequestExtensionAsync() == ExtendedExecutionResult.Allowed)
{
Windows.Storage.ApplicationData.Current.LocalSettings.Values[“LocationAllowed”] = 1;
}
else
{
Windows.Storage.ApplicationData.Current.LocalSettings.Values[“LocationAllowed”] = 0;
}
}

Geolocator locator = new Geolocator();
locator.DesiredAccuracyInMeters = 0;
locator.MovementThreshold = 100; // 100 метров
locator.DesiredAccuracy = PositionAccuracy.High;
locator.PositionChanged += Locator_PositionChanged;
}

Здесь мы инициализируем ExtendedExecutionSession и запрашиваем разрешение на выполнение продления жизни приложения. В зависимости от того разрешено нам или нет мы записываем в настройки значение 1 или 0. После, во время работы приложения мы сможем таким образом определить разрешено ли выполнение в фоне или нет. Это сделано исключительно для примера. В реальном рабочем приложении логирование реализовать можно каким-либо другим способом.

Далее мы создаем объект типа Geolocator и событию PositionChanged назначаем метод Locator_PositionChanged, которое произойдет если текущее расположение изменится как минимум на 100 метров. В этом методе реализуем отображение toast уведомления:

private void Locator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
string xml = $@”
<toast activationType=’foreground’ launch=’args’>
<visual>
<binding template=’ToastGeneric’>
<text>Ваши координаты</text>
<text>Широта: {args.Position.Coordinate.Point.Position.Latitude} – Долгота: {args.Position.Coordinate.Point.Position.Longitude}</text>
</binding>
</visual>
</toast>”;

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

ToastNotification notification = new ToastNotification(doc);
ToastNotifier notifier = ToastNotificationManager.CreateToastNotifier();
notifier.Show(notification);
}

Не забывайте о том, что в выполнении Extended Execution может быть отказано. Это делается для того чтобы у устройства была возможность найти грань между энергосбережением, высокой производительностью и функционалом работающим в фоновом режиме.

После выключения на телефоне режима экономии заряда и запрета выполнения в фоновом режиме большинству приложений (дабы пул не был занят), смог протестировать приложение в действии.

Источник

  • 10/04/2017
  • Чтение занимает 7 мин

В этой статье

В этом разделе содержатся сведения по следующим вопросам:This section includes information on the following:

  • Что происходит при запуске, приостановке, возобновлении и завершении работы приложения универсальной платформы Windows (UWP).What happens when a Universal Windows Platform (UWP) app is started, suspended, resumed, and terminated.
  • Запуск приложений с помощью URI или активации файлаHow to launch apps by using a URI or by file activation.
  • Использование служб приложений, позволяющих приложению универсальной платформы Windows (UWP) обмениваться данными и функциями с другими приложениями.How to use App services, which allow your Universal Windows Platform (UWP) app to share data and functionality with other apps.
  • Использование фоновых задач, позволяющих приложению UWP выполнять работу, даже если приложение не находится на переднем плане.How to use background tasks, which allow a UWP app to do work while the app itself is not in the foreground.
  • Обнаружение подключенных устройств, запуск приложения на другом устройстве и взаимодействие с этим приложением на удаленном устройстве, путем создания единообразного пользовательского интерфейса на разных устройствах.How to discover connected devices, launch an app on another device, and communicate with an app service on a remote device so that you can create user experiences that flow across devices.
  • Выбор правильной технологии для расширения возможностей и разделения на компоненты вашего приложения.How to choose the right technology to extend and componentize your app.
  • Добавление и настройка экрана-заставки для приложения.How to add and configure a splash screen for your app.
  • Создание расширения для вашего приложения с помощью пакетов, которые можно установить из Microsoft Store.How to write extend your app via packages from that users can install from the Microsoft Store.
Читайте также:  В строении и жизненном цикле споровиков произошли

Жизненный цикл приложенийThe app lifecycle

В этом разделе описывается жизненный цикл приложения универсальной платформы Windows (UWP) для Windows 10 с момента его активации и до закрытия.This section details the lifecycle of a Windows 10 Universal Windows Platform (UWP) app, from the time it is activated until it is closed.

РазделTopicОписаниеDescription
Жизненный цикл приложенияApp lifecycleУзнайте о жизненном цикле приложения UWP и о том, что происходит при загрузке, приостановке и возобновлении работы вашего приложения системой Windows.Learn about the life cycle of a UWP app and what happens when Windows launches, suspends, and resumes your app.
Обработка предварительного запуска приложенияHandle app prelaunchУзнайте, как обрабатывать предварительный запуск приложения.Learn how to handle app prelaunch.
Обработка активации приложенияHandle app activationУзнайте, как обрабатывать активацию приложения.Learn how to handle app activation.
Обработка приостановки работы приложенияHandle app suspendУзнайте, как сохранить важные данные приложения, когда система приостанавливает его работу.Learn how to save important application data when the system suspends your app.
Обработка возобновления работы приложенияHandle app resumeУзнайте, как обновить отображаемое содержимое, когда система возобновляет работу приложения.Learn how to refresh displayed content when the system resumes your app.
Освобождение памяти при переходе приложения в фоновый режимFree memory when your app moves to the backgroundУзнайте, как уменьшить объем используемой приложением в фоновом режиме памяти, чтобы работа приложения не прекратилась.Learn how to reduce the amount of memory that your app uses when it is in the background state so that it won’t be terminated.
Задержка приостановки приложения с помощью расширенного сеанса выполненияPostpone app suspension with extended executionУзнайте, как использовать расширенный сеанс выполнения для обеспечения работы приложения в свернутом состоянииLearn how to use extended execution to keep your app running when it is minimized

Запуск приложенийLaunch apps

В разделе Запуск приложения с помощью URI подробно описано, как использовать универсальный код ресурса (URI) для запуска приложения.The Launch an app with a URI section details how to use a Uniform Resource Identifier (URI) to launch an app.

РазделTopicОписаниеDescription
Запуск приложения по умолчанию для URILaunch the default app for a URIУзнайте, как запускать приложение по умолчанию для универсального кода ресурса (URI).Learn how to launch the default app for a Uniform Resource Identifier (URI). Универсальные коды ресурсов (URI) позволяют запустить приложение, чтобы выполнить определенную задачу.URIs allow you to launch another app to perform a specific task. В этом разделе также приводится обзор множества схем URI, встроенных в Windows.This topic also provides an overview of the many URI schemes built into Windows.
Обработка активации URIHandle URI activationУзнайте, как зарегистрировать приложение в качестве стандартного обработчика определенного имени схемы универсального кода ресурса (URI).Learn how to register an app to become the default handler for a Uniform Resource Identifier (URI) scheme name.
Запуск приложения для результатовLaunch an app for resultsУзнайте, как запустить приложение из другого приложения и обмениваться данными между двумя приложениями.Learn how to launch an app from another app and exchange data between the two. Эта процедура называется запуском приложения для результатов.This is called launching an app for results.
Выбор и сохранение звуковых сигналов с помощью схемы URI ms-tonepickerChoose and save tones using the ms-tonepicker URI schemeВ этом разделе описывается схема URI ms-tonepicker и порядок ее использования для отображения средства выбора звуковых сигналов с целью выбора звукового сигнала, сохранения звукового сигнала и получения понятного имени звукового сигнала.This topic describes the ms-tonepicker URI scheme and how to use it to display a tone picker to select a tone, save a tone, and get the friendly name for a tone.
Запуск приложения “Параметры” для WindowsLaunch the Windows Settings appУзнайте, как запустить приложение “Параметры” для Windows из вашего приложения.Learn how to launch the Windows Settings app from your app. В этом разделе приводится описание схемы URI ms-settings.This topic describes the ms-settings URI scheme. Используйте эту схему URI для запуска приложения “Параметры” для Windows на определенных страницах параметров.Use this URI scheme to launch the Windows Settings app to specific settings pages.
Запуск приложения Microsoft StoreLaunch the Microsoft Store appВ этом разделе описывается схема URI ms-windows-store.This topic describes the ms-windows-store URI scheme. Ваше приложение может использовать эту схему URI для запуска приложения UWP на определенных страницах в Store.Your app can use this URI scheme to launch the UWP app to specific pages in the Store.
Запуск приложения “Карты Windows”Launch the Windows Maps appУзнайте, как запустить приложение «Карты Windows» из вашего приложения.Learn how to launch the Windows Maps app from your app.
Запуск приложения “Люди”Launch the People appВ этом разделе приводится описание схемы URI ms-people.This topic describes the ms-people URI scheme. Ваше приложение может использовать эту схему URI для запуска приложения “Люди” для конкретных действий.Your app can use this URI scheme to launch the People app for specific actions.
Поддержка привязки приложений к Интернету с помощью обработчиков URI приложенияSupport web-to-app linking with app URI handlersПовышайте интерес пользователей к вашему приложению с помощью обработчиков URI приложения.Drive user engagement with your app by using app URI handlers.

В разделе Запуск приложения через активацию файла рассказывается о том, как настроить приложение для запуска при открытии определенного типа файла.The Launch an app through file activation section details how to set up your app to launch when a file of a certain type is opened.

См. другие статьи, связанные с запуском приложения, ниже.See other topics related to launching an app below.

РазделTopicОписаниеDescription
Продолжение активности пользователей даже на разных устройствахContinue user activity, even across devicesОбеспечьте интерес пользователей к вашему приложению на разных устройствах, запуская приложение с того места, где пользователь остановился.Reengage users with your app, even across devices, by launching your app where the user left off.
Запуск приложения с помощью автозапускаAuto-launching with AutoPlayАвтозапуск можно использовать для добавления приложения в список вариантов при подключении пользователем устройств к компьютеру.You can use AutoPlay to provide your app as an option when a user connects a device to their PC. Это могут быть как устройства томов, такие как USB-устройства флэш-памяти, SD-карты или DVD-диски, так и прочие устройства, такие как камеры или проигрыватели мультимедиа.This includes non-volume devices such as a camera or media player, or volume devices such as a USB thumb drive, SD card, or DVD.
Зарезервированные имена файлов и схем URIReserved file and URI scheme namesВ этом разделе перечислены зарезервированные имена файлов и схем URI, которые недоступны в приложении.This topic lists the reserved file and URI scheme names that are not available to your app.

Службы и расширения приложенийApp services and extensions

В разделе Службы приложений и расширения описывается, как интегрировать службы приложений с приложением UWP, чтобы разрешить общий доступ к данным и функциям между приложениями.The App services and extensions section describes how to integrate app services into your UWP app to allow the sharing of data and functionality across apps.

РазделTopicОписаниеDescription
Создание и использование службы приложенийCreate and consume an app serviceУзнайте, как написать приложение универсальной платформы Windows (UWP), которое может предоставлять службы другим приложениям UWP, и как использовать эти службы.Learn how to write a Universal Windows Platform (UWP) app that can provide services to other UWP apps and how to consume those services.
Преобразование службы приложений для ее запуска в одном процессе с ведущим приложениемConvert an app service to run in the same process as its host appПреобразуйте код службы приложений, выполняемый в отдельном фоновом процессе, в код, выполняемый в одном процессе с поставщиком службы приложений.Convert app service code that ran in a separate background process into code that runs inside the same process as your app service provider.
Расширение возможностей приложения за счет его служб, расширений и пакетовExtend your app with app services, extensions, and packagesОпределите, какую технологию следует использовать для расширения и разбиения приложения на компоненты, и прочитайте краткий обзор каждого метода.Determine which technology to use to extend and componentize your app and get a brief overview of each.
Создание и использование расширения приложенияCreate and consume an app extensionСоздавайте и размещайте расширения приложений универсальной платформы Windows (UWP), расширяющие возможности приложения с помощью пакетов, которые пользователи могут установить из Microsoft Store.Write and host Universal Windows Platform (UWP) app extensions to extend your app via packages that users can install from the Microsoft Store.
Читайте также:  Стадия жизненного цикла юность

Фоновые задачиBackground tasks

В разделе Фоновые задачи показано, как обеспечить выполнение облегченного кода в фоновом режиме в ответ на триггеры.The Background tasks section shows you how to make lightweight code run in the background in response to triggers.

РазделTopicОписаниеDescription
Руководство по работе с фоновыми задачамиGuidelines for background tasksУбедитесь, что ваше приложение отвечает требованиям, необходимым для выполнения фоновых задач.Ensure your app meets the requirements for running background tasks.
Доступ к датчикам и устройствам из фоновой задачиAccess sensors and devices from a background task DeviceUseTrigger позволяет приложению UWP получать доступ к датчикам и периферийным устройствам в фоновом режиме даже тогда, когда приложение переднего плана приостановлено.DeviceUseTrigger lets your Universal Windows app access sensors and peripheral devices in the background, even when your foreground app is suspended.
Создание и регистрация фоновой задачи, выполняемой внутри процессаCreate and register an in-process background taskСоздание и регистрация фоновой задачи, которая запускается в том же процессе, что и приложение переднего плана.Create and register a background task that runs in the same process as your foreground app.
Создание и регистрация внепроцессной фоновой задачиCreate and register an out-of-process background taskСоздание и регистрация фоновой задачи, которая запускается в виде отдельного процесса из вашего приложения, и регистрация ее для выполнения, когда приложение находится не на переднем плане.Create and register a background task that that runs in a separate process from your app, and register it to run when your app is not in the foreground.
Создание и регистрация фоновой задачи COM для приложения WinMainCreate and register a COM background task for a winmain appСоздайте фоновую задачу COM, которая может выполняться в основном процессе или вне процесса, когда упакованное приложение WinMain не запущено.Create a COM background task that can run in your main process or out-of-process when your packaged winmain app may not be running.
Перенос фоновой задачи, выполняемой вне процесса, в фоновую задачу внутри процессаPort an out-of-process background task to an in-process background taskУзнайте, как преобразовать выполняемую вне процесса фоновую задачу в фоновую задачу внутри процесса, выполняемую в том же процессе, что и ваше приложение переднего плана.Learn how to port an out-of-process background task to an in-process background task that runs in the same process as your foreground app.
Отладка фоновой задачиDebug a background taskУзнайте, как отладить фоновую задачу, выполнив в том числе активацию фоновой задачи и трассировку отладки в журнале событий Windows.Learn how to debug a background task, including background task activation and debug tracing in the Windows event log.
Объявление фоновых задач в манифесте приложенияDeclare background tasks in the application manifestВы можете разрешить использование фоновых задач, объявив их как расширения в манифесте приложения.Enable the use of background tasks by declaring them as extensions in the app manifest.
Регистрация фоновых задач группыGroup background task registrationИзолируйте регистрацию фоновой задачи с помощью групп.Isolate background task registration with groups.
Обработка отмененной фоновой задачиHandle a cancelled background taskУзнайте, как создать фоновую задачу, которая распознает запросы на отмену, прекращает работу и сообщает приложению об отмене, используя постоянное хранилище.Learn how to make a background task that recognizes cancellation requests and stops work, reporting the cancellation to the app using persistent storage.
Отслеживание хода выполнения и завершения фоновых задачMonitor background task progress and completionУзнайте, как ваше приложение распознает ход выполнения и завершение фоновой задачи.Learn how your app can recognize background task progress and completion.
Оптимизация фоновой активностиOptimize background activityУзнайте, как снизить потребление энергии в фоновом режиме и как взаимодействовать с параметрами пользователя для фоновых задач.Learn how to reduce the energy used in the background and interact with user settings for background activity.
Регистрация фоновой задачиRegister a background taskСведения о создании функции, которую можно многократно использовать для безопасной регистрации большинства фоновых задач.Learn how to create a function that can be re-used to safely register most background tasks.
Реагирование на системные события с помощью фоновых задачRespond to system events with background tasksУзнайте, как создавать фоновые задачи, отвечающие на события SystemTrigger.Learn how to create a background task that responds to SystemTrigger events.
Запуск фоновой задачи по таймеруRun a background task on a timerУзнайте, как запланировать однократное выполнение фоновой задачи или периодически запускать фоновую задачу.Learn how to schedule a one-time background task, or run a periodic background task.
Выполнение в фоновом режиме в течение неограниченного срокаRun in the background indefinitelyИспользуйте возможность для выполнения фоновой задачи или расширенного сеанса выполнения в фоновом режиме в течение неограниченного срока.Use a capability to run a background task or extended execution session in the background indefinitely.
Запуск фоновой задачи в приложенииTrigger a background task from within your appУзнайте, как использовать ApplicationTrigger для активации фоновой задачи в приложении.Learn how to use the ApplicationTrigger to activate a background task from within your app.
Задание условий выполнения фоновой задачиSet conditions for running a background taskУзнайте, как задать условия, которые управляют запуском выполнения фоновой задачи.Learn how to set conditions that control when your background task will run.
Передача данных в фоновом режимеTransfer data in the backgroundИспользуйте фоновую передачу данных API для копирования файлов в фоновом режиме.Use the background transfer API to copy files in the background.
Обновление живой плитки из фоновой задачиUpdate a live tile from a background taskИспользуйте фоновую задачу для обновления живой плитки вашего приложения свежим содержимым.Use a background task to update your app’s live tile with fresh content.
Использование триггера обслуживанияUse a maintenance triggerУзнайте, как использовать класс MaintenanceTrigger для выполнения облегченного кода в фоновом режиме, когда устройство подключено к сети.Learn how to use the MaintenanceTrigger class to run lightweight code in the background while the device is plugged in.

Удаленные системыRemote Systems

В разделе Подключенные приложения и устройства (Project Rome) описано, как использовать платформу удаленных систем для обнаружения удаленных устройств, запуска приложения на удаленном устройстве и взаимодействия со службой приложений на удаленном устройстве.The Connected apps and devices (Project Rome) section describes how to use the Remote Systems platform to discover remote devices, launch an app on a remote device, and communicate with an app service on a remote device.

Экраны-заставкиSplash screens

В разделе Экраны-заставки описывается, как установить и настроить экран-заставку вашего приложения.The Splash screens section describes how to set and configure your app’s splash screen.

РазделTopicОписаниеDescription
Добавление экрана-заставкиAdd a splash screenЗадайте изображение экрана-заставки и цвет фона вашего приложения.Set your app’s splash screen image and background color.
Более продолжительное отображение экрана-заставкиDisplay a splash screen for more timeУвеличьте длительность отображения экрана-заставки, создав и использовав расширенный экран-заставку для приложения.Display a splash screen for more time by creating an extended splash screen for your app. Этот расширенный экран имитирует экран-заставку, отображаемый при запуске приложения, и его можно настраивать.This extended screen imitates the splash screen shown when your app is launched, and can be customized.

Источник