Xamarin.Forms Samouczek dotyczący cyklu życia aplikacji
Zanim podejmiesz próbę ukończenia tego samouczka, musisz pomyślnie ukończyć następujące szkolenia:
- Skompiluj swój pierwszy Xamarin.Forms przewodnik Szybki start dotyczący aplikacji .
- Samouczek dotyczący obiektu StackLayout.
- Samouczek dotyczący obiektu Entry.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Odpowiadanie na uruchomienie, uśpienie lub wznowienie aplikacji.
- Utrwalanie danych między zmianami stanu cyklu życia.
Użyjesz programu Visual Studio 2019 lub Visual Studio dla komputerów Mac, aby utworzyć prostą aplikację, która pokazuje, jak utrwalić dane między zmianami stanu cyklu życia. Na poniższych zrzutach ekranu przedstawiono ostateczną wersję aplikacji:
Reagowanie na zmiany stanu cyklu życia
Do ukończenia tego samouczka jest potrzebny program Visual Studio 2019 (najnowsza wersja) z zainstalowanym pakietem roboczym Opracowywanie aplikacji mobilnych za pomocą środowiska .NET. Ponadto będzie potrzebny sparowany komputer Mac w celu kompilowania aplikacji samouczka w systemie iOS. Aby uzyskać informacje na temat instalowania platformy Xamarin, zobacz Instalowanie platformy Xamarin. Aby uzyskać informacje na temat łączenia programu Visual Studio 2019 z hostem kompilacji Mac, zobacz Parowanie z komputerem Mac w celu opracowywania aplikacji platformy Xamarin.iOS.
Uruchom program Visual Studio i utwórz nową pustą Xamarin.Forms aplikację o nazwie AppLifecycleTutorial.
Ważne
Fragmenty kodu w językach C# i XAML w tym samouczku wymagają, aby rozwiązanie nosiło nazwę AppLifecycleTutorial. Użycie innej nazwy spowoduje błędy kompilacji po skopiowaniu kodu z tego samouczka do rozwiązania.
Aby uzyskać więcej informacji na temat tworzonej biblioteki .NET Standard, zobacz Anatomia Xamarin.Forms aplikacji w przewodnikuXamarin.Forms Szybki start — szczegółowe omówienie.
W Eksploratorze rozwiązań w projekcie AppLifecycleTutorial rozwiń węzeł App.xaml i kliknij dwukrotnie plik App.xaml.cs, aby go otworzyć. Następnie w pliku App.xaml.cs zaktualizuj przesłonięcia
OnStart
,OnSleep
iOnResume
w następujący sposób:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Ten kod spowoduje zaktualizowanie przesłonięć metody cyklu życia aplikacji przy użyciu instrukcji
Console.WriteLine
, które wskazują, kiedy zostały wywołane poszczególne metody:- Metoda
OnStart
jest wywoływana podczas uruchamiania aplikacji. - Metoda
OnSleep
jest wywoływana po przejściu aplikacji w tryb pracy w tle. - Metoda
OnResume
jest wywoływana po wznowieniu działania aplikacji z trybu pracy w tle.
Uwaga
Nie istnieje metoda zakończenia aplikacji. W normalnych warunkach zakończenie aplikacji następuje po wywołaniu metody
OnSleep
.- Metoda
Na pasku narzędzi programu Visual Studio naciśnij przycisk Uruchom (trójkątny przycisk przypominający przycisk odtwarzania), aby uruchomić aplikację w wybranym zdalnym symulatorze systemu iOS lub emulatorze systemu Android. Po uruchomieniu aplikacji następuje wywołanie metody
OnStart
i do okna Dane wyjściowe programu Visual Studio przekazywana jest instrukcja OnStart:[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Gdy aplikacja przechodzi w tryb pracy w tle (po naciśnięciu przycisku Ekran główny w systemie iOS lub Android), wywoływana jest metoda
OnSleep
:[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
Następnie po wznowieniu aplikacji z trybu pracy w tle (co wymaga naciśnięcia ikony aplikacji w systemie iOS lub naciśnięcia przycisku Przegląd w systemie Android i wybrania aplikacji AppLifecycleTutorial) wywoływana jest metoda
OnResume
:Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Uwaga
Te bloki kodu pokazują przykładowe dane wyjściowe po uruchomieniu aplikacji w systemie Android.
Zatrzymaj aplikację w programie Visual Studio.
Aby uzyskać więcej informacji na temat Xamarin.Forms cyklu życia aplikacji, zobacz Xamarin.Forms Cykl życia aplikacji.
Utrwalanie danych między zmianami stanu cyklu życia
Podklasa Application
ma statyczny słownik Properties
, którego można używać do przechowywania danych podczas zmian stanu w cyklu życia. Ten słownik używa klucza string
i przechowuje wartość object
. Słownik jest automatycznie zapisywany na urządzeniu i jest ponownie zapełniany po ponownym uruchomieniu aplikacji.
Ważne
Słownik Properties
może serializować tylko typy pierwotne magazynu.
W tym ćwiczeniu zmodyfikujesz aplikację, aby utrwalić tekst z obiektu Entry
, gdy aplikacja zacznie działać w tle, i przywrócić tekst do obiektu Entry
po ponownym uruchomieniu aplikacji.
W Eksploratorze rozwiązań w projekcie AppLifecycleTutorial rozwiń węzeł App.xaml i kliknij dwukrotnie plik App.xaml.cs, aby go otworzyć. Następnie w pliku App.xaml.cs usuń cały kod szablonu i zastąp go następującym kodem:
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"); } } }
Ten kod definiuje właściwość
DisplayText
i stałądisplayText
. Gdy aplikacja zaczyna działać w tle lub jest kończona, przesłonięcie metodyOnSleep
dodaje wartość właściwościDisplayText
do słownikaProperties
w odniesieniu do kluczadisplayText
. Następnie podczas uruchamiania aplikacji, zakładając, że słownikProperties
zawiera kluczdisplayText
, wartość klucza jest przywracana do właściwościDisplayText
.Ważne
Zawsze sprawdzaj słownik
Properties
pod kątem obecności klucza przed uzyskaniem do niego dostępu w celu uniknięcia nieoczekiwanych błędów.Nie jest konieczne przywrócenie danych ze słownika
Properties
w przeciążeniu metodyOnResume
. Jest to spowodowane tym, że gdy aplikacja zaczyna działać w tle, ona i jej stan są nadal w pamięci.W Eksploratorze rozwiązań w projekcie AppLifecycleTutorial kliknij dwukrotnie plik MainPage.xaml, aby go otworzyć. Następnie w pliku MainPage.xaml usuń cały kod szablonu i zastąp go następującym kodem:
<?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>
Ten kod deklaratywnie definiuje interfejs użytkownika dla strony, która składa się z obiektu
Entry
w obiekcieStackLayout
. WłaściwośćEntry.Placeholder
określa tekst zastępczy widoczny, gdy obiektEntry
jest wyświetlany po raz pierwszy, a program obsługi zdarzeń o nazwieOnEntryCompleted
jest rejestrowany ze zdarzeniemCompleted
. Ponadto obiektEntry
ma nazwę określoną za pomocą atrybutux:Name
. Dzięki temu plik związany z kodem może uzyskać dostęp do obiektuEntry
przy użyciu przypisanej do niego nazwy.W Eksploratorze rozwiązań w projekcie AppLifecycleTutorial rozwiń węzeł MainPage.xaml i kliknij dwukrotnie plik MainPage.xaml.cs, aby go otworzyć. Następnie w pliku MainPage.xaml.cs dodaj przesłonięcie metody
OnAppearing
i program obsługi zdarzeńOnEntryCompleted
do klasy: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; }
Metoda
OnAppearing
pobiera wartość właściwościApp.DisplayText
i ustawia ją jako wartość właściwościText
obiektuEntry
.Uwaga
Przesłonięcie metody
OnAppearing
jest wykonywane po określeniu układu obiektuContentPage
, ale tuż przed tym, gdy stanie się on widoczny. W związku z tym jest to dobre miejsce do ustawiania zawartości widoków Xamarin.Forms .Jeśli tekst jest finalizowany w obiekcie
Entry
za pomocą klawisza Return, metodaOnEntryCompleted
jest wykonywana i tekst obiektuEntry
jest zapisywany we właściwościApp.DisplayText
.Na pasku narzędzi programu Visual Studio naciśnij przycisk Uruchom (trójkątny przycisk przypominający przycisk odtwarzania), aby uruchomić aplikację w wybranym zdalnym symulatorze systemu iOS lub emulatorze systemu Android.
Wprowadź jakiś tekst do obiektu
Entry
i naciśnij klawisz Return. Następnie uruchom aplikację w tle, naciskając przycisk Strona główna, aby wywołać metodęOnSleep
.W programie Visual Studio zatrzymaj aplikację, po czym uruchom ją ponownie, a tekst, który został wcześniej zapisany w obiekcie
Entry
, zostanie przywrócony:Zatrzymaj aplikację w programie Visual Studio.
Aby uzyskać więcej informacji na temat utrwalania danych w słowniku właściwości, zobacz Słownik właściwości w przewodniku Xamarin.Forms Klasa aplikacji.
Gratulacje!
Gratulujemy ukończenia tego samouczka, w którym przedstawiono sposób wykonywania następujących czynności:
- Odpowiadanie na uruchomienie, uśpienie lub wznowienie aplikacji.
- Utrwalanie danych między zmianami stanu cyklu życia.
Następne kroki
Aby dowiedzieć się więcej na temat podstaw tworzenia aplikacji Xamarin.Formsmobilnych w usłudze , przejdź do samouczka Local Database ( Lokalna baza danych).
Pokrewne łącza
Widzisz problem w tej sekcji? W takim przypadku prześlij opinię, abyśmy mogli udoskonalić tę sekcję.