Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz



Podobne dokumenty
dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

akademia androida Pierwsze kroki w Androidzie część I

Laboratorium Systemów Mobilnych. Wykład 2

Podstawowe elementy GUI - zadania

Fragmenty są wspierane od Androida 1.6

Programowanie usług działających w tle

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Android. Zarz dzanie cyklem»ycia i stanem. Piotr Fulma«ski. March 10, 2015

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Systemy operacyjne na platformach mobilnych

Programowanie dla Androida. Ubiquitous

Mariusz Fraś. Instytut Informatyki. olitechnika Wrocławska. Systemy Wbudowane. Android. Dr inż. Mariusz Fraś. maf 1

Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

WSTĘP DO ANDROIDA. Laboratorium 1 Systemy i aplikacje bez granic

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

akademia androida Intencje oraz URI część III

WSTĘP DO ANDROIDA. Laboratorium

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

akademia androida Składowanie danych część VI

Powiadomienia w systemie Android

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

akademia androida Sensory część V Mobile Applications Developers

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Wątki w Android OS. Matt Rutkowski. GynSoft sp. z o.o. matt@gynsoft.net

Android, wprowadzenie do SDK

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Programowanie obiektowe

SOP System Obsługi Parkingów

Systemy operacyjne na platformach mobilnych

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie obiektowe

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Mechanizm zapisu preferencji

Obsługa SMS i telefonii

Systemy operacyjne na platformach mobilnych

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Technologie internetowe w programowaniu.

Mobilne aplikacje multimedialne

Tworzenie i wykorzystanie usług

Wprowadzenie do systemu Android

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Android pierwsza aplikacja

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Multimedia JAVA. Historia

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

Wykład 4: Klasy i Metody

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Metody Metody, parametry, zwracanie wartości

Laboratorium Systemów Mobilnych. Wykład 1

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Programowanie obiektowe

Rozdział 4 KLASY, OBIEKTY, METODY

akademia androida Http i AsyncTask część VII

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

protected void onsaveinstancestate(bundle outstate); protected void onrestoreinstancestate(bundle savedinstancestate);

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Programowanie obiektowe

Klasy i obiekty cz II

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

[Android] Podstawy programowania

PROGRAMOWANIE MOBILNE: ANDROID. Marcin Luckner

Platformy Programistyczne Zagadnienia sieciowe i wątki

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

Agenda. Implicit intents Wyświetlanie obrazków Menu Ikona aplikacji Praca z kolekcjami i ListView Własny widok

Jednorazowe zaplanowanie zadania program at.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Laboratorium 1 - Programowanie proceduralne i obiektowe

Wykład 8: klasy cz. 4

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Dokumentacja do API Javy.

Programowanie obiektowe

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

Pakiety i interfejsy. Tomasz Borzyszkowski

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe i zdarzeniowe

Android i Bluetooth Low Energy. Laboratorium 4 Niestacjonarne

Systemy operacyjne na platformach mobilnych

Systemy operacyjne na platformach mobilnych

Java Język programowania

Aplikacje w środowisku Java

Podstawowe elementy GUI - zadania

Programowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Definicje klas i obiektów. Tomasz Borzyszkowski

Builder (budowniczy) Cel: Przykład:

Transkrypt:

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz pierwszy najpierw znajduje się w tle systemu gdzie otrzymuje focus. W czasie działania system wywołuje serie metod związanych z cyklem życia aktywności, w zależności od działań użytkownika uruchamiane są różne stany aplikacji. Tworząc aplikacje androidową mamy możliwość określenia zachowania aktywności podczas przechodzenia pomiędzy różnymi stanami.

Tworząc aktywności: W zależności od skomplikowania aktywności nie konieczne jest implementowanie wszystkich metod z cyklu życiowego. Ważne jest jednak aby wiedzieć jak poszczególne działają i jak się je implementuje aby zapewnić odpowiednie zachowywanie programu.

Tworząc aktywności należy pilnować aby: Nie zawiesza się gdy do użytkownika ktoś dzwoni albo użytkownik zmienia aplikacje w trakcie korzystania z naszego programu Nie zużywa zasobów kiedy nie jest używany Nie traci informacji przy opuszczeniu aplikacji przez użytkownika i jest w stanie powrócić do tego samego punktu po powrocie do aplikacji Nie zawiesza się i nie traci danych podczas zmiany orientacji.

Aktywność przez dłuższy okres czasu występować może tylko w 3 z tych stanów: Resumed ( running ) Aktywność działa na głównym ekranie, użytkownik może wchodzić w interakcje z programem Paused Aplikacja jest częściowo zasłonięta inna aktywnością inna aktywność jest półprzeźroczysta albo nie zasłania całego ekranu. Zatrzymana aktywność nie otrzymuje żadnych inputów i nie przetwarza żadnego kodu. Stopped Aktywnośc jest w ogóle niewidoczna, znajduje się w tle. Aktywność w tym stanie zachowuje wszystkie dane, ale nie może uruchamiać kodu Stany Created oraz Started są przejściowe.

Aktywność startowa Kiedy użytkownik wybiera aplikacje z ekranu startowego system uruchamia metodę oncreate() dla aktywności zadeklarowanej jako launcher (albo main ). To która aktywność jest główna definiuje się w manifeście. Główna aktywność musi być zadeklarowana w manifeście wewnątrz <intent-filter> który zawiera akcje MAIN oraz kategorie LAUNCHER:

<activity android:name=".mainactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> Tworzenie nowej instancji

Większość aplikacji zawiera kilka różnych aktywności, kiedy tworzona jest jakakolwiek aktywność wywoływana jest jej metoda oncreate(). Metoda oncreate() powinna uruchomić logikę która powinna wydarzyć się tylko raz na całe życie aktywności na przykład interfejs użytkownika. Poniższy kod przedstawia metodę oncreate() tworzącą podstawowy setup aktywności, taki jak deklarowanie interfejsu w pliku XML, definiowanie zmiennych i konfigurowanie interfejsu. TextView mtextview;

@Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main_activity); mtextview = (TextView) findviewbyid(r.id.text_message); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { } } ActionBar actionbar = getactionbar(); actionbar.sethomebuttonenabled(false);

Po uruchomieniu oncreate() system uruchamia metodę onstart() a następnie onresume(). Aktywność nigdy nie przebywa w stanie Created oraz Started. Teoretycznie aktywność staje się widoczna dla użytkownika kiedy wywołana jest metoda onstart() ale onresume() uruchamia bardzo szybko i zostaje już w tym stanie do czasu zmiany przez użytkownika.

Niszczenie Aktywności Ostatnim wywołaniem metody jest ondestroy(). System wywołuje tą metodę jako ostateczny sygnał na to, że instancja aktywności jest usuwana z pamięci systemu. Większość aplikacji nie musi implementować metody ondestroy() ponieważ duża część czyszczenia powinna odbywać się w klasach onpause() oraz onstop(). Jednak gdy aktywność zawiera w sobie wątki działające w tle, utworzone w oncreate(), albo zasoby wykorzystywane przez całą aplikację które mogą doprowasdzić do problemów z pamięcią jeśli nie są zamykane poprawnie wówczas należy wyczyścić je ręcznie podczas ondestroy();

@Override public void ondestroy() { super.ondestroy(); android.os.debug.stopmethodtracing(); }

Pausing/Resuming Podczas normalnego działania główna aktywność jest czasami zasłaniana innym komponentem wizualnym który doprowadza do przejścia aktywności do stanu pause. W momencie kiedy aplikacja jest całkowicie niewidoczna przechodzi ona w stan Stop. W momencie przejścia w stan pauzy aplikacja uruchamia metodę onpause() aktywności która została zatrzymana. Metoda ta pozwala zatrzymać działające czynności które nie powinny działać przy zatrzymanym programie (np. film, muzyka itd.) oraz zachować informacje w przypadku opuszczenia aplikacji. W razie powrotu do aplikacji, system wzywa metodę onresume().

Kiedy system uruchamia metodę onpause() oznacza to ze aplikacja nadal jest widoczna, ale istnieje duża szansa, że niedługo aktywność przejdzie w stan Stopped ponieważ użytkownik opuści tą aktywność. Dlatego, zazwyczaj w onpause() powinno się: Zatrzymywać animacje oraz akcje które wymagają CPU Zapisać niezapisane zmiany jeżeli mogą być one potrzebne użytkownikowi później (np. szkic emaila) Zwolnić zasoby które mogą zużywać baterię w czasie zatrzymania aplikacji, kiedy użytkownik ich nie potrzebuje.

Dla przykładu: Aplikacja korzysta z kamery, pauza jest dobrym momentem aby przestać jej używać: @Override public void onpause() { } super.onpause(); if (mcamera!= null) { } mcamera.release() mcamera = null;

Powinno unikać się wykonywania ciężkich operacji w onpause() (np. zapisywania informacji do bazy danych) chyba, że specyfika aplikacji tego wymaga (np. zapisanie wspomnianego już zarysu emaila). Tego typu operacje zazwyczaj powinny odbywać się w onstop().

Resume Przechodząc z onpause do onresume musimy uruchamiać rzeczy które wyrzuciliśmy w onpause, musimy pamiętać, że onpause startuje także podczas pierwszego uruchomienia aplikacji. @Override public void onresume() { } super.onresume(); if (mcamera == null) { } initializecamera();

Zatrzymywanie i restartowanie aktywności Kiedy aplikacja jest stopowana/restartowana: Użytkownik otwiera inną aplikacje. Dotychczas działająca aplikacja jest zatrzymywana. Jeżeli wróci do tej aplikacji później, jest ona restartowana. Użytkownik wykonuje operację w aplikacji która zaczyna nową aktywność. Obecna aktywność jest zatrzymywana a nowa tworzona. Jeśli użytkownik wciśnie wstecz, wówczas pierwotna aktywność jest restartowana. Do użytkownika ktoś dzwoni.

Zatrzymywanie aktywności: Kiedy aplikacja uruchamia metodę onstop() oznacza to, że nie jest już widoczna i powinna usunąć większość zasobów które nie są potrzebne gdy użytkownik jej nie używa.

Przykład onstop który zapisuje dane z notesu do bazy danych @Override protected void onstop() { super.onstop(); ContentValues values = new ContentValues(); values.put(notepad.notes.column_name_note, getcurrentnotetext()); values.put(notepad.notes.column_name_title, getcurrentnotetitle()); getcontentresolver().update(muri, values, null, null);}

Restartowanie aktywności Metoda onstart() uruchamia się zawsze gdy aktywność staje się widoczna. Natomiast metoda onrestart() tylko gdy aktywność uruchamia się po stanie stop. Umożliwia to przeprowadzenie specjalnych zadań odtwarzających aplikację do poprzedniego stanu. Najczęściej jednak re-inicjalizację aplikacji przeprowadza się w onstart().

Odtwarzanie aplikacji Aktywność jest niszczona i odtwarzana zawsze gdy obracamy ekran! System domyślnie zapisuje informacje o wszystkich widokach w layoucie. Dlatego podczas zmiany orientacji po zniszczeniu aktywności, stan layoutu jest odbudowany do poprzedniego stanu bez potrzeby kodowania dodatkowej obsługi. Zapisywanie stanu aktywności Zatrzymując aktywność system wywołuje onsaveinstancestate() dzięki którym aktywność może zapisać swój stan za pomocą kolekcji parę klucz-wartość. Domyślnie metoda zapisuje informacje na temat

stanu hierarchii widoków takich jak np. tekst w EditText albo pozycja scrolla w ListView.

Aby zapisać dodatkowe informacje musimy zaimplementować onsaveinstancestate() i dodać party klucz-wartość : static final String STATE_SCORE = "playerscore"; static final String STATE_LEVEL = "playerlevel" @Override public void onsaveinstancestate(bundle savedinstancestate) { savedinstancestate.putint(state_score, mcurrentscore); savedinstancestate.putint(state_level, mcurrentlevel); super.onsaveinstancestate(savedinstancestate); }

Przywracanie stanu aktywności W momencie przywracania aplikacji po jej zniszczeniu możliwe jest odtworzenie stanu poprzedniego. Metody oncreate() oraz onrestoreinstancestate() otrzymują tą samą paczke (bundle) która zawiera informacje o stanie aktywności. Ponieważ metoda oncreate() jest uruchamiana kiedy system tworzy nowa instancje aktywności, bądź odtwarza poprzednią należy sprawdzać, czy stan naszej paczki nie jest nullem przed próbą dostępu do niej. Jeśli jest to null wówczas oznacza to, że system tworzy nową instancje aktywności zamiast przywracania zniszczonej.

@Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); if (savedinstancestate!= null) { mcurrentscore = savedinstancestate.getint(state_score); mcurrentlevel = savedinstancestate.getint(state_level); } else { //Zainicjalizuj z domyślnymi wartościami } }

W przeciwieństwie do oncreate() metoda onrestoreinstancestate() uruchamia się po onstart() i uruchamia się tylko gdy system ma stan do odtworzenia, w związku z czym nie trzeba sprawdzać czy Bundle jest nullem. public void onrestoreinstancestate(bundle savedinstancestate) { super.onrestoreinstancestate(savedinstancestate); mcurrentscore = savedinstancestate.getint(state_score); mcurrentlevel = savedinstancestate.getint(state_level); }