Udostępnij przez


Obsługa wstrzymania aplikacji

ważne interfejsy API

Dowiedz się, jak zapisywać ważne dane aplikacji, gdy system zawiesza aplikację. Przykład rejestruje procedurę obsługi zdarzeń dla zdarzenia Wstrzymanie i zapisuje ciąg w pliku.

Zarejestruj procedurę obsługi zdarzenia wstrzymania

Zarejestruj się, aby obsłużyć zdarzenie wstrzymania , które wskazuje, że aplikacja powinna zapisać dane aplikacji przed zawieszeniem systemu.

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);
}

Zapisywanie danych aplikacji przed zawieszeniem

Gdy Twoja aplikacja obsługuje zdarzenie Wstrzymanie, ma możliwość zapisania istotnych danych aplikacji w funkcji obsługującej. Aplikacja powinna używać interfejsu API magazynu LocalSettings , aby synchronicznie zapisywać proste dane aplikacji.

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.
}

Zwolnij zasoby

Należy zwolnić wyłączne zasoby i dojścia plików, aby inne aplikacje mogły uzyskiwać do nich dostęp, gdy aplikacja jest zawieszona. Przykłady zasobów wyłącznych obejmują kamery, urządzenia we/wy, urządzenia zewnętrzne i zasoby sieciowe. Jawne zwalnianie wyłącznych zasobów i dojść do plików pomaga zagwarantować, że inne aplikacje będą mogły uzyskiwać do nich dostęp, gdy aplikacja jest zawieszona. Po wznowieniu działania aplikacji należy ponownie uzyskać dostęp do zasobów wyłącznych i dojść do plików.

Uwagi

System zawiesza aplikację za każdym razem, gdy użytkownik przełączy się do innej aplikacji lub do pulpitu lub ekranu startowego. System wznawia działanie aplikacji za każdym razem, gdy użytkownik przełączy się z powrotem do niej. Gdy system wznowi aplikację, zawartość zmiennych i struktur danych jest taka sama jak przed zawieszeniem aplikacji przez system. System przywraca aplikację dokładnie tam, gdzie została przerwana, tak aby wyglądała na użytkownika tak, jakby była uruchomiona w tle.

System próbuje zachować aplikację i jej dane w pamięci podczas jej zawieszenia. Jeśli jednak system nie ma zasobów, aby zachować aplikację w pamięci, system zakończy działanie aplikacji. Gdy użytkownik przełączy się z powrotem do zakończonej aplikacji, która była wcześniej zawieszona, system wysyła zdarzenie Aktywowane i powinien przywrócić dane aplikacji za pomocą metody OnLaunched.

System nie powiadamia aplikacji po jej zakończeniu, dlatego aplikacja musi zapisywać dane aplikacji i zwalniać wyłączne zasoby i dojścia plików po jej zawieszeniu i przywracać je po aktywowaniu aplikacji po zakończeniu.

Jeśli wykonasz wywołanie asynchroniczne w obsłudze, sterowanie wraca natychmiast z tego wywołania asynchronicznego. Oznacza to, że wykonanie może następnie wrócić z programu obsługi zdarzeń, a aplikacja przejdzie do następnego stanu, mimo że wywołanie asynchroniczne nie zostało jeszcze ukończone. Użyj metody GetDeferral w obiekcie EnteredBackgroundEventArgs, który jest przekazywany do procedury obsługi zdarzenia, aby opóźnić zawieszenie, dopóki nie wywołasz metody Complete na zwróconym obiekcie Windows.Foundation.Deferral.

Odroczenie nie zwiększa czasu uruchamiania kodu przed zakończeniem działania aplikacji. Opóźnia zakończenie tylko do momentu wywołania metody Complete odroczenia lub do upływu terminu, w zależności od tego, co nastąpi jako pierwsze. Aby przedłużyć czas w stanie wstrzymania, użyj ExtendedExecutionSession

Uwaga / Notatka

Aby poprawić czas reakcji systemu w systemie Windows 8.1, aplikacje mają niski priorytet dostępu do zasobów po ich zawieszeniu. Aby obsłużyć ten nowy priorytet, limit czasu wstrzymania operacji został rozszerzony, aby aplikacja odpowiadała limitowi czasu 5 sekund dla normalnego priorytetu w systemie Windows lub w okresie od 1 do 10 sekund w systemie Windows Phone. Nie można rozszerzyć ani zmienić tego okna limitu czasu.

Uwaga dotycząca debugowania przy użyciu programu Visual Studio: Visual Studio uniemożliwia systemowi Windows zawieszenie aplikacji dołączonej do debugera. Aby umożliwić użytkownikowi przeglądanie interfejsu debugowania Visual Studio podczas działania aplikacji. Podczas debugowania aplikacji możesz wysłać do niej zdarzenie wstrzymania przy użyciu programu Visual Studio. Upewnij się, że pasek narzędzi Lokalizacja Debugowania jest wyświetlany, a następnie kliknij ikonę Wstrzymaj.