September discount week
Tento týden až 80% sleva na e-learning týkající se jazyka C
50 % bodů zdarma na online výuku díky naší Slevové akci!

Lekce 2 - Struktura Xamarin projektu a životní cyklus aplikace

V minulé lekci, Úvod do Xamarin, jsme si vysvětlili, co to Xamarin vlastně je, co nám umožňuje, a nainstalovali a nastavili jsme si Visual Studio s prvním projektem.

V dnešním tutoriálu se podíváme na strukturu Xamarin.Forms projektu a životní cyklus mobilní aplikace.

Struktura Xamarin.Forms projektu

Když se podíváme do Solution Exploreru, vidíme vygenerovanou strukturu rozdělenou do 4 hlavních částí (názvy se budou lišit podle názvu projektu, já si ho pojmenoval FirstApp).

Solution Explorer Xamarin projektu ve Visual Studio

C# FirstApp

Této části se budeme věnovat nejvíce. Zde budeme psát kód společný pro všechny platformy. Nejvíce nás teď budou zajímat soubory MainPage.xaml a MainPage.xaml.cs. Jistě již tušíte, že soubor MainPage.xaml bude sloužit k rozložení ovládacích prvků v layoutu a MainPage.xaml.cs bude sloužit k "oživení" (obsluhování) těchto prvků pomocí jazyka C# .NET.

FirstApp.Android

V Androidu nás budou nejvíce zajímat následující soubory a složky:

  • Connected Services - Zde se budou nacházet připojené služby jako např. databáze a podobně. K tomu se dostaneme dále v kurzu.
  • Properties - Zde se nachází velice důležitý soubor AndroidManifest.xml. V tomto souboru nastavujeme minimální a cílovou verzi API, ikonu a mnoho dalších parametrů naší aplikace.
  • Resources/ - Zde se budou nacházet obrázky pro naši aplikaci. Všimněte si složek Drawable/ a jejich dalších variant. Je to proto, že i mobilní zařízení mají, podobně jako počítače, různá rozlišení a velikosti a proto budeme potřebovat přizpůsobit rozložení komponent a rozlišení obrázků velikosti displeje každého zařízení. Například pro tablet s full HD použijeme největší rozlišení obrázků, kdežto pro nějaký malý telefon zas to nejmenší, aby aplikace zbytečně nezabírala příliš mnoho paměti a nebyla pomalá.
  • MainActivity.cs - Soubor obsahující základní aktivitu při spuštění aplikace. Více o aktivitách si povíme níže.

FirstApp.iOS

Zde budou základní třídy pro chod iOS aplikace, obrázky a skripty speciálně pro operační systém iOS. Princip je podobný jako u Androidu, takže prozatím netřeba popisovat.

FirstApp.UWP

Tuto možnost uvidíte, pouze pokud jste při instalaci zvolili i UWP (Universal Windows Platform) – platforma pro vývoj moderních aplikací pro Windows 10. Pokud budete chtít tento nástroj doinstalovat později, můžete tak učinit v instalátoru Visual Studia. Jelikož kód pro Windows 10 je v C# a nevyžaduje v začátcích žádné další úpravy, nebudeme se mu v prvních lekcích věnovat.

Projektovou strukturu si podrobně vysvětlíme během praktických lekcí dále v kurzu. Vysvětlovat vše nyní by nemělo valný význam, neboť ještě nemáme potřebné znalosti a spíše by nás to mátlo.

Životní cyklus Android aplikace

Aktivity

Aktivita (Activity) referuje na konkrétní obrazovku naší aplikace a definuje celý svůj život od otevření / zaktivnění až do zavření / zrušení, čemuž říkáme životní cyklus aktivity. Ten obsahuje několik možných fází a metod, které se volají jak se mezi fázemi životního cyklu přechází. Důležité je si zapamatovat, že každá jednotlivá obrazovka (stránka) aplikace musí mít svou vlastní aktivitu. Například:

  • Když spustíme aplikaci, tak jako první uvidíme nějakou animaci s logem, to bude první aktivita.
  • Pak základní menu (2. aktivita).
  • Klikneme na odkaz v menu a otevře se nám nová obrazovka (3. aktivita) a tak pořád dále.

Každá aktivita musí mít metodu OnCreate() a již nepovinně může mít další metody.

Životní cyklus aktivity

Teď již víme, že existují aktivity, které musí mít metodu OnCreate() a mohou mít i další metody. Kdy a proč se ale které metody volají? Jistě znáte, že když hrajete hru na telefonu a někdo vám volá, hra automaticky přejde do pauzy a zobrazí se vám příchozí hovor. Po ukončení hovoru se můžete opět vrátit do hry, která bude ve stavu pauzy. Jistě každý chápe význam různých stavů životního cyklu, reprezentovaných danými metodami. Podívejme se na jeho grafické znázornění:

Životní cyklus mobilní aplikace

Stav aktivity

Každá aktivita se nachází současně jen v jednom z následujících stavů:

  • Běží - Aktivita se úspěšně spustila a běží na popředí, je tedy pro uživatele viditelná.
  • Pauza - Aktivita jde vidět, je ale například překrytá jinou aktivitou. (Upozornění na příchozí SMS, hovor, nebo například dialog o plném nabití baterie při nabíjení). Uživatel se k takové aktivitě nijak nedostane a nemůže s ní pracovat.
  • Zastavená - Aktivita není vidět, uživatel k ní nemá přístup, ale její objekt ještě nebyl úplně zničen. Uživatel se k ní bude moci vrátit, pokud nebude zničena, například nedostatkem paměti.
  • Ukončená - Aktivita je úplně mrtvá.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Při přechodech mezi těmito stavy se volají následující metody.

Metoda OnCreate()

Je základní metodou, která se spustí jako první a zahájí nám životní cyklus aktivity. Například když uživatel spustí aplikaci, tak tato metoda nám určuje, jaké se mají načíst obrázky, jaké zde budou komponenty, zda-li má aplikace běžet ve fullscreenu a podobně. Zkrátka nám zpracuje celý design a funkce tak, jak jsme je navrhli. Je to jediná metoda, kterou je povinné použít!

Metoda OnStart()

Volá se, pokud aktivita byla poprvé spuštěna (po OnCreate()) nebo byla aktivována po svém skrytí (příchozí SMS, systémový dialog například o nabití baterie nebo jiný dialog). Tato metoda nemůže dostat uživatelský vstup.

Metoda OnResume()

Volá se těsně před tím, než je aktivita posunuta do popředí (restart, první spuštění nebo odpauzování), může dostat uživatelský vstup.

Metoda OnPause()

Volá se před přechodem aktivity na pozadí. Systém dostává pravomoc násilného ukončení aktivity.

Metoda OnStop()

Volá se, když se má aktivita zastavit, není viditelná pro uživatele.

Metoda OnDestroy()

Volá se před zrušením aktivity.

Metoda OnRestart()

Jak vyplývá z předchozího diagramu, pokud byla zavolána OnStop() a aktivita se restartuje, volá se OnRestart(), jenž se provede před OnStart().

Tyto metody si můžete zkusit přepsat v Android projektu ve třídě MainActivity. Dokonce si můžete všimnout, že metoda OnCreate() je tam již přepsaná a volá logiku pro vytvoření Xamarin.Forms aplikace.

Životní cyklus iOS aplikace

Stavy iOS aplikace

Podobně jako na Androidu, tak i každá iOS aplikace se vždy nachází současně jen v jednom z následujících stavů:

  • Neběží - Aplikace buďto nebyla ještě spuštěna, anebo byla vypnuta systémem.
  • Neaktivní - Aplikace sice běží v popředí, ale uživatel s ní nemůže nijak pracovat. To může nastat např. při zobrazení upozornění na příchozí SMS nebo hovor.
  • Aktivní - Aplikace se úspěšně spustila a běží na popředí, je tedy pro uživatele viditelná. Z nebo do tohoto stavu se vždy přechází přes stav Neaktivní.
  • Na pozadí - Aplikace není vidět, uživatel k ní nemá přístup, ale stále může volat nějaký kód.
  • Pozastavená - Aplikace není vidět, uživatel k ní nemá přístup a nemůže volat žádný kód. Systém přesune aplikaci do tohoto stavu automaticky např. při nedostatku operační paměti.

Při přechodech mezi těmito stavy se volají následující metody:

Metoda OnActivated()

Volá se při každém otevření aplikace, která se poté nachází ve stavu Aktivní.

Metoda FinishedLaunching()

Volá se jen při spuštění aplikace.

Metoda WillEnterForeground()

Volá se těsně před tím, než se vrátíme do již spuštěné aplikace. Spolu s touto metodou se zavolá také metoda OnActivated().

Metoda OnResignActivation()

Volá se při přechodu aplikace do stavu Neaktivní.

Metoda DidEnterBackground()

Volá se, když aplikace přejde do stavu Na pozadí. Např. při stisknutí Home button.

Metoda WillTerminate()

Volá se těsně před ukončením aplikace, avšak není zaručené, že se tato metoda doopravdy zavolá.

Tyto metody můžete přepisovat v iOS projektu ve třídě AppDelegate, kde se již nachází přepsaná metoda FinishedLaunching(), která volá logiku pro vytvoření Xamarin.Forms aplikace.

Životní cyklus Xamarin.Forms aplikace

Výše uvedené metody životních cyklů Android a iOS aplikace jsou specifické pro danou platformu. Tudíž s nimi můžeme pracovat pouze v projektech reprezentujících dané platformy. Proto Xamarin.Forms poskytuje vlastní metody, které jsou univerzální pro všechny platformy:

Metoda OnStart()

Volá se při zapnutí aplikace.

Metoda OnSleep()

Volá se pokaždé, když opustíme aplikaci.

Metoda OnResume()

Volá se při navrácení do již spuštěné aplikace.

Všechny dnes uvedené metody jsou virtuální, tudíž je můžeme přepisovat a tím jim dodat vlastní logiku. V Xamarin.Forms sdíleném projektu jsou pro nás dokonce již předpřipravené pro přepsání ve třídě App (soubor App.xaml.cs).

V příští lekci, Jazyk XAML v Xamarin.Forms, si popíšeme základy jazyka XAML pro tvorbu uživatelského rozhraní v Xamarin aplikacích.


 

Předchozí článek
Úvod do Xamarin
Všechny články v sekci
Xamarin - Mobilní aplikace v C# .NET
Článek pro vás napsal Jaroslav Smrž
Avatar
Jak se ti líbí článek?
4 hlasů
Autor se věnuje primárně vývoji webových aplikací v .NET Core. Zajímá se také o vývoj her v Unreal Engine 4 a mobilních aplikací v Xamarin.
Aktivity (6)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!