Freigeben über


Behandeln des Anhaltens von Apps

Wichtige APIs

Hier erfahren Sie, wie Sie wichtige Anwendungsdaten speichern, wenn das System die App anhält. Im Beispiel wird ein Ereignishandler für das Anhalteereignis registriert und eine Zeichenfolge in einer Datei gespeichert.

Registrieren des Anhalteereignishandlers

Registrieren Sie sich zum Behandeln des Anhalteereignisses , was angibt, dass Ihre App ihre Anwendungsdaten speichern soll, bevor das System sie angehalten.

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 Anhalteereignis 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 Dateihandles kann sichergestellt werden, dass andere Apps während der Angehaltenen App darauf zugreifen können. Wenn die App fortgesetzt wird, sollte sie die exklusiven Ressourcen und Dateihandles erneut abrufen.

Hinweise

Das System hält Ihre App an, 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, die App und die zugehörigen Daten im Arbeitsspeicher beizubehalten, während sie angehalten 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 angehaltenen App wechselt, die beendet wurde, sendet das System ein Activated-Ereignis und sollte seine Anwendungsdaten in seiner 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 des Handlers ausführen, wird das Steuerelement sofort von diesem asynchronen Aufruf zurückgegeben. Dies bedeutet, dass die Ausführung dann vom Ereignishandler zurückgegeben werden kann und ihre App in den nächsten Zustand wechselt, obwohl der asynchrone Aufruf noch nicht abgeschlossen wurde. Verwenden Sie die GetDeferral-Methode für das EnteredBackgroundEventArgs-Objekt, das an den Ereignishandler übergeben wird, um das Anhalten zu verzögern, bis Sie die Complete-Methode für das zurückgegebene Windows.Foundation.Deferral-Objekt aufgerufen haben.

Eine Verzögerung erhöht nicht die Zeitspanne, die Sie zum Ausführen des Codes ausführen müssen, bevor Die App beendet wird. Er verzögert nur die Beendigung, bis entweder die Complete-Methode der Verzögerung aufgerufen wird, oder die Stichtagsübergänge, je nachdem, was zuerst kommt. Verwenden Sie "ExtendedExecutionSession", um die Zeit im Anhaltezustand 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 die normale Priorität unter Windows oder zwischen 1 und 10 Sekunden auf Windows Phone hat. Sie können dieses Timeoutfenster nicht erweitern oder ändern.

Hinweis zum Debuggen mit Visual Studio: Visual Studio verhindert, dass Windows eine App anhält, die an den Debugger angefügt ist. 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 sie mithilfe von Visual Studio ein Anhalteereignis senden. Stellen Sie sicher, dass die Symbolleiste "Debugspeicherort " angezeigt wird, und klicken Sie dann auf das Symbol "Anhalten" .