Xamarin.Forms: Tutorial zum App-Lebenszyklus
Bevor Sie mit diesem Tutorial fortfahren, sollten Sie zunächst Folgendes erfolgreich abgeschlossen haben:
- Schnellstartanleitung Erstellen Ihrer ersten Xamarin.Forms-App
- Das Tutorial zu StackLayout
- Das Tutorial zu Entry.
In diesem Tutorial lernen Sie Folgendes:
- Reagieren auf den Start, Ruhezustand oder das Fortsetzen einer Anwendung
- Beibehalten von Daten bei Zustandsänderungen des Lebenszyklus
Sie verwenden Visual Studio 2019 oder Visual Studio für Mac, um eine einfache Anwendung zu erstellen, die zeigt, wie Sie Daten auch für alle Änderungen des Lebenszyklusstatus beibehalten können. Die folgenden Screenshots zeigen die finale Anwendung:
Reagieren auf Zustandsänderungen des Lebenszyklus
Für dieses Tutorial benötigen Sie das neueste Release von Visual Studio 2019 und die Workload Mobile-Entwicklung mit .NET. Außerdem müssen Sie über einen gekoppelten Mac verfügen, um die Tutorial-App unter iOS zu kompilieren. Informationen zur Installation der Xamarin-Plattform finden Sie unter Installieren von Xamarin. Informationen zum Verbinden von Visual Studio 2019 mit einem Mac-Buildhost finden Sie unter Durchführen einer Kopplung mit einem Mac für die Xamarin.iOS-Entwicklung.
Starten Sie Visual Studio, und erstellen Sie eine neue leere Xamarin.Forms-App mit dem Namen AppLifecycleTutorial.
Wichtig
Für die C#- und XAML-Codeausschnitte in diesem Tutorial ist es erforderlich, dass die Projektmappe AppLifecycleTutorial genannt wird. Die Verwendung eines anderen Namens führt zu Buildfehlern, wenn Sie Code aus diesem Tutorial in die Projektmappe kopieren.
Weitere Informationen zur .NET Standard-Bibliothek, die erstellt wird, finden Sie unter Struktur einer Xamarin.Forms-Anwendung im Artikel Xamarin.Forms: Ausführliche Erläuterungen zum Schnellstart.
Erweitern Sie App.xaml im Projektmappen-Explorer im Projekt AppLifecycleTutorial, und doppelklicken Sie dann auf die Datei App.xaml.cs, um sie zu öffnen. Aktualisieren Sie anschließend in App.xaml.cs die Überschreibungen
OnStart
,OnSleep
undOnResume
wie folgt:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Diese Code aktualisiert die Methodenüberschreibungen für den Lebenszyklus der App mit
Console.WriteLine
-Anweisungen, die angeben, wann jede Methode aufgerufen wurde:- Die
OnStart
-Methode wird aufgerufen, wenn die Anwendung gestartet wird. - Die
OnSleep
-Methode wird aufgerufen, wenn die Anwendung in den Hintergrund wechselt. - Die
OnResume
-Methode wird aufgerufen, wenn die Anwendung im Hintergrund fortgesetzt wird.
Hinweis
Es gibt keine Methode zum Beenden der App. Unter normalen Umständen erfolgt die Beendigung der Anwendung durch die
OnSleep
-Methode.- Die
Klicken Sie in der Symbolleiste von Visual Studio auf die Schaltfläche zum Starten (die dreieckige Schaltfläche, die einer Wiedergabetaste ähnelt), um die Anwendung im ausgewählten iOS-Remotesimulator oder Android-Emulator zu starten: Beim Starten der Anwendung wird die
OnStart
-Methode aufgerufen, und OnStart wird an das Ausgabe-Fenster in Visual Studio ausgegeben:[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Wenn die Anwendung in den Hintergrund wechselt (durch Tippen auf die „Home“-Taste unter iOS oder Android), wird die
OnSleep
-Methode ausgeführt:[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
Wenn die Ausführung der Anwendung dann im Hintergrund fortgesetzt wird (tippen Sie unter iOS auf das Anwendungssymbol und unter Android auf das Übersichtssymbol, und wählen Sie die Anwendung „AppLifecycleTutorial“ aus), wird die
OnResume
-Methode aufgerufen:Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Hinweis
Diese Codeblöcke zeigen eine Beispielausgabe, wenn die Anwendung unter Android ausgeführt wird.
Beenden Sie die Anwendung in Visual Studio.
Weitere Informationen zum Lebenszyklus von Xamarin.Forms-Apps finden Sie unter Lebenszyklus der Xamarin.Forms-App.
Beibehalten von Daten bei Zustandsänderungen des Lebenszyklus
Die Unterklasse Application
enthält ein statisches Properties
-Wörterbuch, das zum Speichern von Daten bei Zustandsänderungen des Lebenszyklus verwendet werden kann. Das Wörterbuch verwendet einen string
-Schlüssel und speichert einen object
-Wert. Das Wörterbuch wird automatisch auf dem Gerät gespeichert und wird bei Neustart der Anwendung erneut aufgefüllt.
Wichtig
Das Properties
-Wörterbuch kann nur primitive Typen für die Speicherung serialisieren.
In dieser Übung passen Sie die Anwendung an, um den Text einer Entry
-Klasse im Hintergrund beizubehalten und den Text für die Entry
-Klasse wiederherzustellen, wenn die Anwendung erneut gestartet wird.
Erweitern Sie App.xaml im Projektmappen-Explorer im Projekt AppLifecycleTutorial, und doppelklicken Sie dann auf die Datei App.xaml.cs, um sie zu öffnen. Entfernen Sie anschließend in App.xaml.cs den gesamten Vorlagencode, und ersetzen Sie ihn durch den folgenden:
using System; using Xamarin.Forms; namespace AppLifecycleTutorial { public partial class App : Application { const string displayText = "displayText"; public string DisplayText { get; set; } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { Console.WriteLine("OnStart"); if (Properties.ContainsKey(displayText)) { DisplayText = (string)Properties[displayText]; } } protected override void OnSleep() { Console.WriteLine("OnSleep"); Properties[displayText] = DisplayText; } protected override void OnResume() { Console.WriteLine("OnResume"); } } }
Mit diesem Code wird eine
DisplayText
-Eigenschaft und einedisplayText
-Konstante definiert. Wenn die Anwendung minimiert oder beendet wird, fügt die Überschreibung derOnSleep
-Methode den EigenschaftswertDisplayText
zumProperties
-Wörterbuch für einendisplayText
-Schlüssel hinzu. Wenn die Anwendung dann gestartet wird, wird die EigenschaftDisplayText
als Wert für den Schlüssel wiederhergestellt, sofern dasProperties
-Wörterbuch den SchlüsseldisplayText
enthält.Wichtig
Überprüfen Sie immer, ob das
Properties
-Wörterbuch einen Schlüssel enthält, bevor Sie darauf zugreifen, um unerwartete Fehler zu vermeiden.Dies ist nicht notwendig, um Daten aus dem
Properties
-Wörterbuch in derOnResume
-Methodenüberladung wiederherzustellen. Das liegt daran, dass der Zustand noch im Arbeitsspeicher vorhanden ist, wenn die Anwendung minimiert wird.Doppelklicken Sie im Projektmappen-Explorer im Projekt AppLifecycleTutorial auf die Datei MainPage.xaml, um sie zu öffnen. Entfernen Sie dann in MainPage.xaml den gesamten Vorlagencode, und ersetzen Sie ihn durch den folgenden:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="AppLifecycleTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="entry" Placeholder="Enter text here" Completed="OnEntryCompleted" /> </StackLayout> </ContentPage>
Dieser Code definiert deklarativ die Benutzeroberfläche für die Seite, die ein
Entry
in einemStackLayout
enthält. DieEntry.Placeholder
-Eigenschaft legt einen Platzhaltertext fest, der angezeigt wird, wennEntry
zum ersten Mal angezeigt wurde. Außerdem wird ein Ereignishandler namensOnEntryCompleted
mit dem EreignisCompleted
registriert. Außerdem hat dieEntry
-Klasse einen Namen, der mit demx:Name
-Attribut festgelegt wird. Dadurch kann die CodeBehind-Datei mithilfe des zugewiesenen Namens auf das ObjektEntry
zugreifen.Erweitern Sie MainPage.xaml im Projektmappen-Explorer im Projekt AppLifecycleTutorial, und doppelklicken Sie dann auf die Datei MainPage.xaml.cs, um sie zu öffnen. Fügen Sie dann in der Datei MainPage.xaml.cs eine Überschreibung für die Methode
OnAppearing
und den EreignishandlerOnEntryCompleted
zur Klasse hinzu:protected override void OnAppearing() { base.OnAppearing(); entry.Text = (Application.Current as App).DisplayText; } void OnEntryCompleted(object sender, EventArgs e) { (Application.Current as App).DisplayText = entry.Text; }
Die
OnAppearing
-Methode ruft den Wert der EigenschaftApp.DisplayText
ab und legt diesen alsText
-Eigenschaftswert derEntry
-Klasse fest.Hinweis
Die Außerkraftsetzung der
OnAppearing
-Methode wird ausgeführt, nachdem dieContentPage
-Klasse angelegt wurde, aber noch bevor sie angezeigt wird. Daher eignet sich diese Position gut, um den Inhalt von Xamarin.Forms-Ansichten festzulegen.Sobald der Text in der
Entry
-Klasse mit der EINGABETASTE fertig gestellt wird, wird die MethodeOnEntryCompleted
ausgeführt, und derEntry
-Text wird in der EigenschaftApp.DisplayText
gespeichert.Klicken Sie in der Symbolleiste von Visual Studio auf die Schaltfläche zum Starten (die dreieckige Schaltfläche, die einer Wiedergabetaste ähnelt), um die Anwendung im ausgewählten iOS-Remotesimulator oder Android-Emulator zu starten:
Geben Sie einen Text in die
Entry
-Klasse ein, und drücken Sie die EINGABETASTE. Minimieren Sie dann die Anwendung, indem Sie auf die Home-Taste tippen, um die MethodeOnSleep
aufzurufen.Beenden Sie die Anwendung in Visual Studio, und starten Sie sie erneut. Der Text, den Sie zuvor in
Entry
eingegeben haben, wird wiederhergestellt:Beenden Sie die Anwendung in Visual Studio.
Weitere Informationen zum Beibehalten von Daten im Eigenschaftenwörterbuch finden Sie unter Eigenschaftenwörterbuch im Leitfaden zur Xamarin.Forms-App-Klasse.
Herzlichen Glückwunsch!
Glückwunsch, Sie haben das Tutorial erfolgreich abgeschlossen und Folgendes gelernt:
- Reagieren auf den Start, Ruhezustand oder das Fortsetzen einer Anwendung
- Beibehalten von Daten bei Zustandsänderungen des Lebenszyklus
Nächste Schritte
Wenn Sie mehr über die Grundlagen der Erstellung mobiler Apps mit Xamarin.Forms lernen möchten, fahren Sie mit dem Tutorial zu lokalen Datenbanken fort.
Verwandte Links
Liegt ein Problem mit diesem Abschnitt vor? Wenn ja, senden Sie uns Feedback, damit wir den Abschnitt verbessern können.