Поделиться через


Управление приостановкой работы приложения

Основные 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 для объекта EnteredBackgroundEventArgs, который передается вашему обработчику событий, чтобы отложить приостановку до вызова метода Complete для возвращаемого объекта Windows.Foundation.Deferral.

Отсрочка не увеличивает время выполнения кода до завершения работы приложения. Он задерживает завершение только до вызова метода Complete или до истечения крайнего срока —в зависимости от того, что произойдет раньше. Чтобы продлить время в состоянии приостановки, используйте ExtendedExecutionSession

Замечание

Чтобы повысить скорость реагирования системы в Windows 8.1, приложения получают низкоприоритетный доступ к ресурсам после приостановки. Чтобы обеспечить поддержку этого нового приоритета, время ожидания операции приостановки расширяется, чтобы приложение имело эквивалент 5 секунд времени ожидания для нормального приоритета в Windows или от 1 до 10 секунд на Windows Phone. Невозможно расширить или изменить это окно времени ожидания.

Примечание об отладке с помощью Visual Studio: Visual Studio запрещает Windows приостановить приложение, подключенное к отладчику. Это позволит пользователю просматривать пользовательский интерфейс отладки Visual Studio во время выполнения приложения. При отладке приложения вы можете отправить ему событие приостановки с помощью Visual Studio. Убедитесь, что отображается панель инструментов расположения отладки, а затем нажмите значок приостановки.