Xamarin.Forms Kurz životního cyklu aplikace
Než se pustíte do tohoto kurzu, měli byste úspěšně dokončit tyto položky:
- Vytvořte svůj první Xamarin.Forms rychlý start k aplikaci .
- Kurz k objektu StackLayout
- Kurz o objektu Entry
V tomto kurzu se naučíte:
- Reagovat na spuštění, uspání nebo obnovení aplikace
- Uchovávat data napříč změnami stavu životního cyklu
V sadě Visual Studio 2019 nebo Visual Studio pro Mac vytvoříte jednoduchou aplikaci, která předvádí, jak trvale uchovávat data napříč změnami životního cyklu. Na následujících snímcích obrazovky je zachycena finální aplikace:
Reakce na změny stavu životního cyklu
K dokončení tohoto kurzu byste měli mít Visual Studio 2019 (nejnovější vydanou verzi) s nainstalovanou sadou funkcí Vývoj mobilních aplikací pomocí .NET. Kromě toho budete potřebovat spárovaný Mac pro sestavení aplikace z kurzu v iOSu. Informace o instalaci platformy Xamarin najdete v článku Instalace Xamarinu. Informace o připojení sady Visual Studio 2019 k hostiteli buildu pro Mac najdete v článku Spárování s počítačem Mac pro vývoj na platformě Xamarin.iOS.
Spusťte Visual Studio a vytvořte novou prázdnou Xamarin.Forms aplikaci s názvem AppLifecycleTutorial.
Důležité
Fragmenty kódu C# a XAML v tomto kurzu vyžadují, aby řešení mělo název AppLifecycleTutorial. Použití jiného názvu způsobí při kopírování kódu z tohoto kurzu do řešení chyby sestavení.
Další informace o knihovně .NET Standard, která se vytvoří, najdete v tématu Anatomie Xamarin.Forms aplikace v podrobném Xamarin.Forms kurzu Rychlý start.
V Průzkumníkovi řešení v projektu AppLifecycleTutorial rozbalte uzel App.xaml a poklikáním otevřete soubor App.xaml.cs. Pak v souboru App.xaml.cs aktualizujte přepsání metod
OnStart
,OnSleep
aOnResume
následujícím způsobem:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Tento kód aktualizuje přepsání metod životního cyklu aplikace pomocí příkazů
Console.WriteLine
, které indikují, kdy byly jednotlivé metody vyvolány:- Metoda
OnStart
se vyvolá při spuštění aplikace. - Metoda
OnSleep
se vyvolá při přechodu aplikace do pozadí. - Metoda
OnResume
se vyvolá při obnovení aplikace z pozadí.
Poznámka:
Pro ukončení aplikace není k dispozici žádná metoda. Za normálních podmínek dochází k ukončení aplikace z metody
OnSleep
.- Metoda
Na panelu nástrojů sady Visual Studio stiskněte tlačítko Spustit (trojúhelníkové tlačítko, která se podobá tlačítku Přehrát), aby se aplikace spustila ve zvoleném vzdáleném simulátoru iOSu nebo emulátoru Androidu. Při spuštění aplikace se vyvolá metoda
OnStart
a výstupem v sadě Visual Studio v okně Výstup je OnStart:[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Při přechodu aplikace do pozadí (klepnutím na tlačítko Domů v iOSu nebo Androidu) se vyvolá 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
Při obnovení aplikace z pozadí (v iOSu po klepnutí na ikonu aplikace, v Androidu po klepnutí na tlačítko přehledu a následném výběru aplikace AppLifecycleTutorial) se pak vyvolá metoda
OnResume
:Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Poznámka:
Tyto bloky kódu ukazují příklad výstupu při spuštění aplikace v Androidu.
V sadě Visual Studio zastavte aplikaci.
Další informace o Xamarin.Forms životním cyklu aplikace najdete v tématu Xamarin.Forms Životní cyklus aplikace.
Uchovávání dat napříč změnami stavu životního cyklu
Podtřída Application
má statický slovník Properties
, do kterého je možné ukládat data napříč změnami stavu životního cyklu. Tento slovník využívá klíč string
a ukládá hodnotu object
. Slovník se na zařízení ukládá automaticky a opakovaně se plní při restartování aplikace.
Důležité
Slovník Properties
může serializovat pouze primitivní typy úložiště.
V tomto cvičení změníte aplikaci tak, aby při zpracování úloh na pozadí uchovala text z objektu Entry
a při restartování aplikace ho v objektu Entry
obnovila.
V Průzkumníkovi řešení v projektu AppLifecycleTutorial rozbalte uzel App.xaml a poklikáním otevřete soubor App.xaml.cs. Pak v souboru App.xaml.cs odeberte veškerý kód šablony a nahraďte ho následujícím kódem:
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"); } } }
Tento kód definuje vlastnost
DisplayText
a konstantudisplayText
. Při přechodu aplikace do pozadí nebo při jejím ukončení přepsání metodyOnSleep
přidá hodnotu vlastnostiDisplayText
do slovníkuProperties
oproti klíčidisplayText
. Po spuštění aplikace se za předpokladu, že slovníkProperties
obsahuje klíčdisplayText
, obnoví hodnota klíče ve vlastnostiDisplayText
.Důležité
Před použitím slovníku vždy zkontroluje, že obsahuje klíč
Properties
, abyste předešli neočekávaným chybám.V přetížení metody
OnResume
není nutné obnovovat data ze slovníkuProperties
. Důvodem je to, že při přechodu aplikace do pozadí zůstává i se svým stavem v paměti.V Průzkumníkovi řešení v projektu AppLifecycleTutorial poklikáním otevřete soubor MainPage.xaml. Pak v souboru MainPage.xaml odeberte veškerý kód šablony a nahraďte ho následujícím kódem:
<?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>
Tento kód deklarativně definuje uživatelské rozhraní pro stránku, která se skládá z objektu
Entry
v objektuStackLayout
. VlastnostEntry.Placeholder
určuje zástupný text, který se zobrazí při prvním zobrazení objektuEntry
, a obslužná rutina s názvemOnEntryCompleted
se zaregistruje v událostiCompleted
. Kromě toho objektEntry
má název určený atributemx:Name
. Soubor kódu tak může přistupovat k objektuEntry
pomocí přiřazeného názvu.V Průzkumníkovi řešení v projektu AppLifecycleTutorial rozbalte uzel MainPage.xaml a poklikáním otevřete soubor MainPage.xaml.cs. Potom v souboru MainPage.xaml.cs přidejte do třídy přepsání metody
OnAppearing
a obslužnou rutinu událostiOnEntryCompleted
: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
načte hodnotu vlastnostiApp.DisplayText
a nastaví ji jako hodnotu vlastnostiText
objektuEntry
.Poznámka:
Přepsání metody
OnAppearing
se spustí až po rozloženíContentPage
, ale těsně předtím, než se stane viditelným. Proto je to vhodné místo pro nastavení obsahu Xamarin.Forms zobrazení.Při dokončování zadávání textu do objektu
Entry
se stisknutím klávesy Return spustí metodaOnEntryCompleted
a text objektuEntry
se uloží do vlastnostiApp.DisplayText
.Na panelu nástrojů sady Visual Studio stiskněte tlačítko Spustit (trojúhelníkové tlačítko, která se podobá tlačítku Přehrát), aby se aplikace spustila ve zvoleném vzdáleném simulátoru iOSu nebo emulátoru Androidu.
Zadejte text do objektu
Entry
a stiskněte klávesu Return. Potom aplikaci převeďte do pozadí klepnutím na tlačítko Domů, aby se vyvolala metodaOnSleep
.V sadě Visual Studio zastavte aplikaci a pak ji znovu spusťte. Text, který jste zadali do objektu
Entry
, se obnoví:V sadě Visual Studio zastavte aplikaci.
Další informace o zachování dat do slovníku vlastností naleznete v tématu Vlastnosti slovníkuXamarin.Forms v průvodci třídou aplikace.
Gratulujeme!
Blahopřejeme k dokončení tohoto kurzu, ve kterém jste se naučili provádět tyto akce:
- Reagovat na spuštění, uspání nebo obnovení aplikace
- Uchovávat data napříč změnami stavu životního cyklu
Další kroky
Další informace o základech vytváření mobilních aplikací najdete Xamarin.Formsv kurzu Místní databáze.
Související odkazy
Máte s touto částí nějaké problémy? Pokud ano, dejte nám prosím vědět, abychom tuto část mohli vylepšit.