3. ŽIVOTNÍ CYKLUS ACTIVITY

Podobné dokumenty
Obsah. Životní cyklus activity Context Intent Spouštění aktivit Interakce s uživatelem. Toast. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant

Začínáme s vývojem pro Android

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Uživatelské rozhraní. Layouty FrameLayout LinearLayout RelativeLayout TableLayout ScrollView Taby Dialogy ViewFlipper 11/29/11

Android za hranicemi Hello World

KMI / TMA. Tvorba mobilních aplikací. 8. seminář ZS 2017/2018 ČTVRTEK 13:15-15:45

Příklad zobrazení toastu s vlastním designem

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Práce na pozadí. Služby. Notifikace

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA EKONOMICKÁ

Rozšíření aplikace mobilního rozhraní pro nevidomé (BlindShell) o přídavné moduly

Programování v C++ 2, 4. cvičení

DUM 06 téma: Tvorba makra pomocí VBA

KMI / TMA Tvorba mobilních aplikací. 2. seminář ZS 2016/2017 Středa 13:15-15:45

11/29/11. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant. 11. Přednáška. Broadcast receiver Timer Alarmy Widgety

ANDROID. Ing. Ladislav Pešička

KMI / TMA Tvorba mobilních aplikací

VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika

1 Uživatelská dokumentace

SPRÁVA NÁKLADŮ NA PROVOZ AUTOMOBILU PRO ANDROID

Programování v C++ 1, 5. cvičení

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Mobilní malware na platformě Android Přednáška 1. Ing. Milan Oulehla

Obsah. LayoutInflater. UI model KeyEvent View Tvorba vlastních komponent Canvas Matrix Vlastní EditText

Programování v C++ 3, 3. cvičení

Diplomová práce. Rozvrh hodin pro

Java aplety. Předávání parametrů z HTML

SPÍNACÍ HODINY. Nastavení hodin a předvolby. Obr. 1

KMI / TMA Tvorba mobilních aplikací. 3. seminář ZS 2016/2017 Středa 13:15-15:45

Více o konstruktorech a destruktorech

Generické programování

Software602 Form Designer

1. ESO9 MAJETEK ZÁKLADNÍ VLASTNOSTI DOPORUČENÝ HW... 3

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

UJO Framework. revoluční architektura beans. verze

JAVA Android Java, letní semestr

Reliance 3 design OBSAH

Android 100% Java telefon. Petr Musil

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY ANDROID APLIKACE PRO VÝUKU SLOVNÍ ZÁSOBY ANDROID APPLICATION FOR LEARNING VOCABULARY

Dokumentace k produktu IceWarp Notifikační nástroj

typová konverze typová inference

IRAE 07/08 Přednáška č. 7. Začátek (head)

Úvod do programování - Java. Cvičení č.4

Zpracování deklarací a přidělování paměti

František Hudek. červen ročník

8 Třídy, objekty, metody, předávání argumentů metod

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

20. Projekt Domácí mediotéka

Úvodem 17. Začínáme 21. Výzvy vývoje aplikací pro chytré telefony 22 Z čeho se aplikace pro systém Android skládají 23 Co máte k dispozici 24

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Principy objektově orientovaného programování

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Návod na použití portálu 802

Projekt Obrázek strana 135

5. přednáška. Stylování a themování Themování Android Interface Definition Language Data Sdílení dat 11/29/11

Aplikace NAM tracker pro ios. Příručka platí pro verzi NAM trackeru 1.1.0

15. Projekt Kalkulačka

METODIKA PRÁCE SE ŽÁKEM PŘI TESTOVÁNÍ

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Možnosti programu. KAPITOLA 5 Možnosti

Obsah. Bluetooth BluetoothAdapter Síťová připojení ConnectivityManager Wireless Lan WifiManager Hlasový vstup. Přehrávač médií. Schránka.

Struktura programu v době běhu

1 Administrace systému Moduly Skupiny atributů Atributy Hodnoty atributů... 4

Programovatelný regulátor FUJI PXG4

Programování v Javě I. Leden 2008

Dotykova obrazovka v programu TRIFID

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Konstruktory a destruktory

Použití inteligentních značek s informačními službami

Postup přechodu na podporované prostředí. Přechod aplikace BankKlient na nový operační systém formou reinstalace ze zálohy

Popis funkcí a parametrů programu. Reliance External communicator. Verze 1.5.0

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky


Operační systém MS Windows XP Professional

APS Administrator.CR

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v C++ 1, 6. cvičení

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

KMI / TMA. Tvorba mobilních aplikací. 3. seminář ZS 2017/2018 ČTVRTEK 13:15-15:45

Programátorská příručka

ČÁST 1. Základy 32bitového programování ve Windows

Možnosti tisku v MarushkaDesignu

17. Projekt Trojúhelníky

IRAE 07/08 Přednáška č. 1

Základy objektové orientace I. Únor 2010

Učební pomůcka Simulace Witness

1 Nejkratší cesta grafem

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Teoretické minimum z PJV

Rychlý návod k použití Eee PC 4G (701) Eee PC 4G Surf Eee PC 8G

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

JAY Systém TELwork s.r.o. JAY Systém Klient. Uživatelská příručka ( ) JAYSystem Klient - Uživatelská příručka.docx Stránka: 1 / 15

Dotyková obrázovká v prográmu TRIFID

Nástroje na vývoj aplikací pro ios Trocha motivace na úvod Co budete potřebovat Co když nemáte k dispozici počítač s macos? Vývojové prostředí Xcode

NPRG031 Programování II 1 / :25:46

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

NMIN201 Objektově orientované programování 1 / :36:09

Transkript:

23.2.2013 1 Programování pro operační systém Android (BI-AND) (c) Autor a garant: M. Havryluk, Spolupráce: M. Balík, O. Kroupa, M. Pelant 3. ŽIVOTNÍ CYKLUS ACTIVITY BI-AND

23.2.2013 2 Obsah Životní cyklus activity Context Intent Spouštění activit Interakce s uživatelem Toast

23.2.2013 3 Stavy activity Active Běží, je viditelná, má user focus Paused Částečně viditelná, Activity objekt zůstává v paměti Může být ukončena Stopped Úplně překryta jinou activitou Přesunuta do pozadí (background) Stále naživu, Activity objekt zůstává v paměti Destroyed

23.2.2013 4

23.2.2013 5 oncreate(bundle savedinstancestate) { } První nastartování activity Activita běžela, ale byla překryta jinou activitou (příp. aplikací). Uživatel se opět vrátil k původní activitě OS potřeboval paměť (původní proces mohl být zabit) Activita běží a je vynucena změna Resources Otočení displeje Zasunutí nebo vysunutí HW klávesnice Z dokovací stanice Změna jazyka

23.2.2013 6 oncreate(bundle savedinstancestate) { } Zavedení layoutu a inicializace widgetů Nastavení proměnných Nastavení UI Jako parametr je Bundle objekt s uloženým předchozím stavem activity (pokud nějaký je) Získání dat z volajícího Intentu (pokud je potřeba) Následuje onstart() 1. @Override 2. public void oncreate(bundle savedinstancestate) { 3. super.oncreate(savedinstancestate); 4. setcontentview(r.layout.main); 5. }

23.2.2013 7 onstart() { } Zavolá se, když se activita stává viditelná uživatelem (po metodě onrestart() nebo oncreate()) Následuje: onresume() pokud se activita dostane do popředí 1. @Override 2. protected void onstart() { 3. super.onstart(); 4. }

23.2.2013 8 onresume() { } Zavolá se, pokud je activita na popředí V tento moment je activita na vrcholu zásobníku Activita nyní přijímá vstup od uživatele (má user focus) Vždy následuje onpause() 1. @Override 2. protected void onresume() { 3. super.onresume(); 4. }

23.2.2013 9 onrestart() { } Zavolá se, poté, co byla activita zastavená a před tím, než se znovu spustí Vždy následuje onstart() 1. @Override 2. protected void onrestart() { 3. super.onrestart(); 4. }

23.2.2013 10 onpause() { } Zavolá se, pokud activita přestane být na popředí Při přechodu na jinou activitu Při zobrazení dialogu Při stisku tlačítka HOME Dialog vs. dialog Po skončení této metody může být proces zabit Následuje: onresume() pokud se activita vrátí do viditelného stavu onstop() pokud activita není již viditelná Zabití procesu pokud systém potřebuje prostředky

23.2.2013 11 onpause() { } Doporučená implementace: Uložení neobnovitelných dat Ukončení všech animací a operací náročných na CPU Přerušení sledování GPS a jiných senzorů Uvolnění různých zámků (screenlock, wakelock ) Operace musí (by měly) být časově nenáročné 1. @Override 2. protected void onpause() { 3. super.onpause(); 4. wakelock.release(); 5. locationmanager.removeupdates(locationlistener); 6. savechanges(); 7. }

23.2.2013 12 onstop() { } Zavolá se, pokud activita již není viditelná Activita je na pozadí Nemusí být nikdy zavolána! Následuje: onrestart() Pokud se activita vrátí do viditelného stavu ondestroy() Pokud se activita ukončí Zabití procesu pokud systém potřebuje prostředky 1. @Override 2. protected void onstop() { 3. super.onstop(); 4. }

23.2.2013 13 ondestroy() { } Poslední metoda, která se zavolá před tím než je activita ukončena Následuje ukončení activity Nemusí být nikdy zavolána! 1. @Override 2. protected void ondestroy() { 3. super.ondestroy(); 4. }

23.2.2013 14 Ukládání stavu activity onsaveinstancestate(bundle outstate) Ukládání stavu activity (proměnné, nastavení widgetů ) Zavoláno předtím, než je activita zničena Nezaměňovat s metodou onpause(), která je volána vždy Defaultní implementace se stará o většinu UI elementů Musí být nastaveno ID widgetu (např. uložení obsahu EditText) Nezahrnuje např. jestli je Button enabled nebo disabled Obsah proměnných se ukládá do Bundle outstate

23.2.2013 15 Ukládání stavu activity Obnovení stavu během oncreate(bundle savedinstancestate) onrestoreinstancestate(bundle savedinstancestate) Dodán stejný Bundle pro obě metody Většinou vše zpracováno v oncreate() Zavoláno po onstart() Stav není možné obnovit, pokud byl proces ukončen

23.2.2013 16 Další metody životního cyklu onpostcreate() Zavoláno po onstart() a onrestoreinstancestate() Start-up / konfigurace Activity byla dokončena onpostresume() Zavoláno po onresume() Většinou používáno pouze OS a nebývá implementováno vývojářem onuserleavehint() a onuserinteraction() Pomáhá rozlišit různé akce uživatete a podle toho např. upravit notifikace

23.2.2013 17 Bundle Vysoká náročnost zpracování serializace Třída sloužící k mapování jakýchkoli Serializable nebo Parcelable objektů Mapuje se pomocí String -ových klíčů Vkládání: Pracnější sepsání implementace Parcelable 1. Bundle bundle = new Bundle(); 2. bundle.putstring("klíč", "hodnota"); 3. bundle.putint("číslo", 1); 4. bundle.putserializable("cokoli serializovatelného", new Integer(3)); Získávání: Pro klíč používat konstanty! 1. String s = bundle.getstring("klíč"); //nebo (String)bundle.get("klíč"); 2. int i = bundle.getint("číslo"); 3. Integer integer = (Integer) bundle.get("cokoli serializovatelného");

23.2.2013 18 Ukládání stavu activity Uložení proměnné count: 1. @Override 2. protected void onsaveinstancestate(bundle outstate) { 3. super.onsaveinstancestate(outstate); 4. outstate.putint("count", count); 5. } Obnovení: 1. @Override 2. protected void oncreate(bundle savedinstancestate) { 3. super.oncreate(savedinstancestate); 4. if(savedinstancestate!=null){ 5. count = savedinstancestate.getint("count"); 6. } 7.... 8. }

23.2.2013 19 Spouštění activit Activity se spouštějí pomocí startactivity(intent); nebo startactivityforresult(intent, requestcode); Historie activit se ukládá do zásobníku Pomocí Intentu se definuje, jaká activita se jak spustí 1. Context context = this; 2. Intent i = new Intent(context, NewActivity.class); 3. startactivity(i);

23.2.2013 20 Context Abstraktní třída, od které dědí komponenty aplikace Poskytuje základní funkčnost společnou pro všechny komponenty Přístup ke zdrojům Přístup k třídám Spouštění activit a služeb Vysílání a odchytávání Intentů

23.2.2013 21 Intent Prostředek pro komunikaci mezi komponentami Může obsahovat: Jednoznačný identifikátor komponenty Extras Category Data Flags Více v 8. přednášce

23.2.2013 22 Intent jednoznačný identifikátor Slouží pro specifikování, jaká konkrétní třída se má po odeslání Intentu spustit Metoda má 2 parametry: Context odkaz na aktuální komponentu Class třída, která se má po odeslání intentu spustit Např: intent.setclass(mainactivity.this, NewActivity.class);

23.2.2013 23 Intent Extras Slouží pro předávání hodnot mezi komponentami Používá se stejné mapování jako u Bundle Lze předat jakýkoli Serializable nebo Parcelable objekt Mapuje se pomocí Stringů intent.putextra("count", count);

23.2.2013 24 Intent Flags Určuje, jakým způsobem se spustí nová activita (příp. jak bude umístěna na zásobník) Intent.FLAG_ACTIVITY_NO_ANIMATION; Vypne animace při spouštění dané activity Intent.FLAG_ACTIVITY_NO_HISTORY; Spouštěná activita se neuloží do zásobníku Jakmile z ní uživatel odejde, activita se ukončí

23.2.2013 25 Intent Flags Intent.FLAG_ACTIVITY_CLEAR_TOP; Pokud již je spouštěná activita v zásobníku, obnoví se a všechny activity nad ní budou ukončeny Intent.FLAG_ACTIVITY_REORDER_TO_FRONT; Pokud již je spouštěná activita v zásobníku, obnoví se a přesune se navrch zásobníku Intent.FLAG_ACTIVITY_SINGLE_TOP; Pokud je spouštěná activita na vrcholu zásobníku, obnoví se a nespustí se nová

23.2.2013 26 Skok na domovskou activitu Určení domovské activity a vyčištění zásobníku 1. Intent intent = new Intent(this,NewActivity.class); 2. Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 3. startactivity(intent); 4. finish(); Navigace v rámci aplikace prošla výraznou změnou od verze 3.0 Některé informace mohou být deprecated (více. v 11. přednášce)

23.2.2013 27 Launchmode Jak se spustí daná activita se také dá určit v AndroidManifest.xml atributem android:launchmode Učitá analogie ke konstantám FLAG_ACTIVITY_* v Intentu Může nabývat těchto hodnot: standard, singletop, singletask a singleinstance

23.2.2013 28 Launchmode Back Stack vs. Task standard vždy vytvořena nová instance singletop vždy vytvořena nová instance, pokud není již instance activity na vrchu zásobníku singletask vytvořen nový task, pokud instance activity již existuje, dojde k přesměrování na ní (např. webový prohlížeč) singleinstance stejné jako singletask, ale v rámci tasku je vždy jenom jedna activita Vždy funguje Back button nehledě na lauchmode

23.2.2013 29

23.2.2013 30 Activita očekávající výsledek Pomocí startactivityforresult(intent, requestcode) spustíme activitu, od které očekáváme, že nám po ukončení vrátí výsledek Nastavením requestcode umožníme vyfiltrování odpovědí při zpracování výsledků 1. Context context = this; 2. Intent i = new Intent(context, NewActivity.class); 3. i.setflags(intent.flag_activity_no_animation Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 4. i.putextra("cislo", 10); 5. startactivityforresult(i, 1);

23.2.2013 31 Activita poskytující výsledek Pomocí getintent() získáme Intent, který spustil activitu Pomocí setresult(resultcode, data) nastavíme výsledek, který se vrátí volající activitě Příkazem finish() ukončíme aktuální activitu 1. Intent i = getintent(); 2. int cislo = i.getintextra("cislo", 0); 3. 4. Intent result = new Intent(); 5. result.putextra("vysledek", cislo+10); 6. setresult(result_ok, result); 7. finish();

23.2.2013 32 Activita očekávající výsledek Metoda onactivityresult se zavolá když se ukončí activita spuštěná pomocí startactivityforresult requestcode je stejný jako při spouštění activity resultcode je číslo nastavené pomocí setresult v již ukončené aktivitě data Intent s daty vrácenými activitou 1. @Override 2. protected void onactivityresult(int requestcode, int resultcode, Intent data) { 3. if(requestcode == 1 && resultcode==result_ok){ 4. int vysledek=data.getintextra("vysledek", -1); 5.... 6. } 7. super.onactivityresult(requestcode, resultcode, data); 8. }

23.2.2013 33 Toast zpráva pro uživatele Zobrazí se nad activitou Automaticky se zobrazuje a mizí Nelze ji programově schovat ani nijak ovlivňovat při zobrazování Zobrazovat pouze dodatečné (krátké) informace Uživatel si nemusí Toastu všimnout Bude tímto ovlivněna práce s aplikací?

23.2.2013 34 Toast zpráva pro uživatele Trvání zobrazení lze nastavit pouze na hodnoty Toast.LENGTH_SHORT Toast.LENGTH_LONG Pozicovatelnost nastavuje se pomocí metody setgravity(gravity) Context context = getapplicationcontext(); CharSequence text = "Hello toast!"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show();

23.2.2013 35 Další zdroje http://developer.android.com/guide/topics/fundamentals/ta sks-and-back-stack.html http://developer.android.com/guide/practices/ui_guidelines /activity_task_design.html (depracated) Guidelines pro vývoj aplikací http://developer.android.com/guide/practices/design/perfor mance.html