Обработка приостановки работы приложения
Важные API
Узнайте, как сохранить важные данные приложения при приостановке работы приложения. В примере регистрируется обработчик событий для события приостановки и сохраняется строка в файл.
Регистрация обработчика событий приостановки
Зарегистрируйтесь для обработки события приостановки , указывающего, что приложение должно сохранять данные приложения перед приостановкой системы.
using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
partial class MainPage
{
public MainPage()
{
InitializeComponent();
Application.Current.Suspending += new SuspendingEventHandler(App_Suspending);
}
}
Public NotInheritable Class MainPage
Public Sub New()
InitializeComponent()
AddHandler Application.Current.Suspending, AddressOf App_Suspending
End Sub
End Class
MainPage::MainPage()
{
InitializeComponent();
Windows::UI::Xaml::Application::Current().Suspending({ this, &MainPage::App_Suspending });
}
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace AppName;
MainPage::MainPage()
{
InitializeComponent();
Application::Current->Suspending +=
ref new SuspendingEventHandler(this, &MainPage::App_Suspending);
}
Сохранение данных приложения перед приостановкой
Когда приложение обрабатывает событие приостановки , у него есть возможность сохранить важные данные приложения в функции обработчика. Приложение должно использовать API хранилища LocalSettings , чтобы сохранить простые данные приложения синхронно.
partial class MainPage
{
async void App_Suspending(
Object sender,
Windows.ApplicationModel.SuspendingEventArgs e)
{
// TODO: This is the time to save app data in case the process is terminated.
}
}
Public NonInheritable Class MainPage
Private Sub App_Suspending(
sender As Object,
e As Windows.ApplicationModel.SuspendingEventArgs) Handles OnSuspendEvent.Suspending
' TODO: This is the time to save app data in case the process is terminated.
End Sub
End Class
void MainPage::App_Suspending(
Windows::Foundation::IInspectable const& /* sender */,
Windows::ApplicationModel::SuspendingEventArgs const& /* e */)
{
// TODO: This is the time to save app data in case the process is terminated.
}
void MainPage::App_Suspending(Object^ sender, SuspendingEventArgs^ e)
{
// TODO: This is the time to save app data in case the process is terminated.
}
Выпуск ресурсов
Вы должны освободить эксклюзивные ресурсы и дескриптор файлов, чтобы другие приложения могли получить доступ к ним во время приостановки приложения. Примерами эксклюзивных ресурсов являются камеры, устройства ввода-вывода, внешние устройства и сетевые ресурсы. Явное освобождение эксклюзивных ресурсов и дескрипторов файлов помогает обеспечить доступ к другим приложениям во время приостановки приложения. После возобновления работы приложения он должен повторно привыковать свои эксклюзивные ресурсы и дескриптор файлов.
Замечания
Система приостанавливает приложение всякий раз, когда пользователь переключается на другое приложение или на рабочий стол или начальный экран. Система возобновляет работу приложения всякий раз, когда пользователь переключается на него. Когда система возобновляет работу приложения, содержимое переменных и структур данных совпадает с тем, что было до того, как система приостановила приложение. Система восстанавливает приложение точно там, где оно осталось, чтобы он отображался пользователю, как если бы он работал в фоновом режиме.
Система пытается сохранить приложение и его данные в памяти во время приостановки. Однако если в системе нет ресурсов для хранения приложения в памяти, система завершит работу приложения. Когда пользователь переключается обратно на приостановленное приложение, которое было завершено, система отправляет активированное событие и должен восстановить данные приложения в своем методе OnLaunched.
Система не уведомляет приложение о завершении работы, поэтому приложение должно сохранить свои данные приложения и освободить эксклюзивные ресурсы и дескриптор файлов при приостановке и восстановить их после активации приложения.
При асинхронном вызове в обработчике элемент управления возвращается немедленно из этого асинхронного вызова. Это означает, что выполнение может затем вернуться из обработчика событий, и приложение перейдет в следующее состояние, даже если асинхронный вызов еще не завершен. Используйте метод GetDeferral в объекте EdBackgroundEventArgs, передаваемом обработчику событий, чтобы отложить приостановку до тех пор, пока не вызовете метод Complete в возвращенном объекте Windows.Foundation.Deferral.
Отсрочка не увеличивает время выполнения кода до завершения работы приложения. Он задерживает завершение только до вызова метода завершения отсрочки, или крайний срок проходит в зависимости от того, что происходит первым. Чтобы продлить время в состоянии приостановки, используйте ExtendedExecutionSession
Примечание.
Чтобы повысить скорость реагирования системы в Windows 8.1, приложения получают низкоприоритетный доступ к ресурсам после приостановки. Чтобы обеспечить поддержку этого нового приоритета, время ожидания операции приостановки расширено, чтобы приложение было эквивалентно 5-секундного времени ожидания для нормального приоритета в Windows или от 1 до 10 секунд на Windows Phone. Невозможно расширить или изменить это окно времени ожидания.
Примечание об отладке с помощью Visual Studio: Visual Studio запрещает Windows приостановить приложение, подключенное к отладчику. Это позволит пользователю просматривать пользовательский интерфейс отладки Visual Studio во время выполнения приложения. При отладке приложения его можно отправить событие приостановки с помощью Visual Studio. Убедитесь, что отображается панель инструментов "Расположение отладки", а затем щелкните значок приостановки .
См. также
- Жизненный цикл приложения
- Обработка активации приложения
- Обработка возобновления работы приложения
- Рекомендации по UX для запуска, приостановки и возобновления работы
- Расширенное выполнение