Freigeben über


Behandeln des Aussetzens von Apps

Wichtige APIs

Erfahren Sie, wie Sie wichtige Anwendungsdaten speichern, wenn das System Ihre App aussetzt. Im Beispiel wird ein Ereignishandler für das Suspending-Ereignis registriert und eine Zeichenfolge wird in einer Datei gespeichert.

Registrieren des Ereignis-Handlers für die Aussetzung

Registrieren Sie sich, um das Suspending-Ereignis zu behandeln, das angibt, dass Ihre App die Anwendungsdaten speichern soll, bevor das System sie aussetzt.

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

Speichern von Anwendungsdaten vor dem Anhalten

Wenn Ihre App das Suspending-Ereignis behandelt, hat sie die Möglichkeit, die wichtigen Anwendungsdaten in der Handlerfunktion zu speichern. Die App sollte die LocalSettings Speicher-API verwenden, um einfache Anwendungsdaten synchron zu speichern.

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

Freigeben von Ressourcen

Sie sollten exklusive Ressourcen und Dateihandles freigeben, damit andere Apps auf sie zugreifen können, während Ihre App angehalten wird. Beispiele für exklusive Ressourcen sind Kameras, E/A-Geräte, externe Geräte und Netzwerkressourcen. Durch die explizite Freigabe exklusiver Ressourcen und Datei-Handles kann sichergestellt werden, dass andere Apps darauf zugreifen können, während Ihre App angehalten ist. Wenn die App fortgesetzt wird, sollte sie ihre zugewiesenen Ressourcen und Dateihandgriffe erneut abrufen.

Bemerkungen

Das System pausiert Ihre App, wenn der Benutzer zu einer anderen App oder zum Desktop oder Startbildschirm wechselt. Das System setzt Ihre App fort, wenn der Benutzer wieder dorthin wechselt. Wenn das System Ihre App fortsetzt, ist der Inhalt Ihrer Variablen und Datenstrukturen identisch mit dem, bevor das System die App angehalten hat. Das System stellt die App genau dort wieder her, wo sie unterbrochen wurde, sodass sie dem Benutzer so erscheint, als ob sie im Hintergrund ausgeführt wurde.

Das System versucht, Ihre App und deren Daten im Speicher zu halten, während sie pausiert ist. Wenn das System jedoch nicht über die Ressourcen verfügt, um Ihre App im Arbeitsspeicher zu halten, beendet das System Ihre App. Wenn der Benutzer wieder zu einer suspendierten App, die beendet wurde, wechselt, sendet das System ein Activated-Ereignis und sollte die Anwendungsdaten in der OnLaunched--Methode wiederherstellen.

Das System benachrichtigt eine App nicht, wenn sie beendet wird. Daher muss Ihre App ihre Anwendungsdaten speichern und exklusive Ressourcen und Dateihandles freigeben, wenn sie angehalten wird, und sie wiederherstellen, wenn die App nach dem Beenden aktiviert wird.

Wenn Sie einen asynchronen Aufruf innerhalb Ihres Handlers ausführen, wird die Kontrolle sofort von diesem asynchronen Aufruf zurückgegeben. Dies bedeutet, dass die Ausführung dann von Ihrem Ereignishandler zurückkehren kann und Ihre App in den nächsten Status wechselt, obwohl der asynchrone Aufruf noch nicht abgeschlossen wurde. Verwenden Sie die GetDeferral--Methode für das EnteredBackgroundEventArgs-Objekt, das an Ihren Ereignishandler übergeben wird, um die Aussetzung zu verzögern, bis Sie die Complete--Methode für das zurückgegebene Windows.Foundation.Deferral--Objekt aufrufen.

Ein Aufschub erhöht nicht die Zeitspanne, die Ihnen zur Ausführung Ihres Codes zur Verfügung steht, bevor Ihre App beendet wird. Sie verzögert die Beendigung nur, bis entweder die Complete-Methode der Verzögerung aufgerufen wird, oder die Stichtagsübergänge, je nachdem, was zuerstkommt. Verwenden Sie ExtendedExecutionSession, um die Zeit im Zustand des Anhaltens zu verlängern.

Hinweis

Um die Reaktionsfähigkeit des Systems in Windows 8.1 zu verbessern, erhalten Apps nach dem Anhalten Zugriff auf Ressourcen mit niedriger Priorität. Um diese neue Priorität zu unterstützen, wird das Timeout für den Anhaltevorgang erweitert, sodass die App das Äquivalent des 5-Sekunden-Timeouts für normale Priorität unter Windows oder zwischen 1 und 10 Sekunden unter Windows Phone aufweist. Sie können dieses Timeoutfenster nicht erweitern oder ändern.

Eine Notiz zum Debuggen mit Visual Studio: Visual Studio verhindert, dass Windows eine App, die mit dem Debugger verbunden ist, unterbricht. Dadurch kann der Benutzer die Visual Studio-Debug-UI anzeigen, während die App ausgeführt wird. Wenn Sie eine App debuggen, können Sie ihr mithilfe von Visual Studio ein Suspendierungsereignis senden. Stellen Sie sicher, dass die Debug-Position Symbolleiste angezeigt wird, und klicken Sie dann auf das Anhalten Symbol.