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



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

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

akademia androida Pierwsze kroki w Androidzie część I

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

Podstawowe elementy GUI - zadania

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Systemy operacyjne na platformach mobilnych

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

Wzorce projektowe strukturalne cz. 1

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

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Programowanie usług działających w tle

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

Kompozycja i dziedziczenie klas

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

Podstawy modelowania w j zyku UML

Android. Hierarchie widoków i ich wy±wietlanie. Piotr Fulma«ski. March 14, 2016

Sposoby przekazywania parametrów w metodach.

Laboratorium Systemów Mobilnych. Wykład 2

Model obiektu w JavaScript

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

Programowanie dla Androida. Ubiquitous

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Android pierwsza aplikacja

Programowanie wspóªbie»ne

1. Wprowadzenie do C/C++

Baza danych - Access. 2 Budowa bazy danych

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

MiASI. Modelowanie systemów informatycznych. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Android, wprowadzenie do SDK

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

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

Subversion - jak dziaªa

MiASI. Modelowanie analityczne. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

SVN - wprowadzenie. 1 Wprowadzenie do SVN. 2 U»ywanie SVN. Adam Krechowicz. 16 lutego Podstawowe funkcje. 2.1 Windows

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

Programowanie i struktury danych 1 / 44

Lekcja 6 Programowanie - Zaawansowane

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

Zarz dzanie rm. Zasada 2: samoorganizuj ce si zespoªy. Piotr Fulma«ski. March 17, 2015

Fragmenty są wspierane od Androida 1.6

Wprowadzenie do systemu Android

Programowanie wspóªbie»ne

1. Wprowadzenie do C/C++

Technologie internetowe w programowaniu.

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

Systemy operacyjne na platformach mobilnych

OPIS PRZEDMIOTU ZAMÓWIENIA:

[Android] Podstawy programowania

Współbieżność w środowisku Java

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

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

akademia androida Http i AsyncTask część VII

Tworzenie i wykorzystanie usług

WFiIS Imi i nazwisko: Rok: Zespóª: Nr wiczenia: Fizyka Dominik Przyborowski IV 5 22 J drowa Katarzyna Wolska

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

Aplikacja wielow tkowa prosty komunikator

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Systemy operacyjne na platformach mobilnych

Regulamin Usªugi VPS

Wzorce projektowe kreacyjne

Listy i operacje pytania

Obsługa SMS i telefonii

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

Powiadomienia w systemie Android

Laboratorium Systemów Mobilnych. Wykład 1

akademia androida Intencje oraz URI część III

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Programowanie i struktury danych

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Programowanie wspóªbie»ne

1 Stos: Stack i Stack<T>

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Dokumentacja do API Javy.

Programowanie obiektowe w Perlu

19. Obiektowo± 1 Kacze typowanie. 2 Klasy

Charakterystyka systemów plików

Opera Wykorzystanie certyfikatów niekwalifikowanych w oprogramowaniu Opera wersja 1.1 UNIZETO TECHNOLOGIES SA

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

Programowanie obiektowe

Systemy operacyjne na platformach mobilnych

Programowanie obiektowe

Zastosowania matematyki

Konfiguracja historii plików

KLASYCZNE ZDANIA KATEGORYCZNE. ogólne - orzekaj co± o wszystkich desygnatach podmiotu szczegóªowe - orzekaj co± o niektórych desygnatach podmiotu

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

przewidywania zapotrzebowania na moc elektryczn

WYKŁAD 12. Wzorce projektowe czynnociowe State Mediator

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

Mechanizm zapisu preferencji

Transkrypt:

Android Zarz dzanie cyklem»ycia i stanem Piotr Fulma«ski Instytut Nauk Ekonomicznych i Informatyki, Pa«stwowa Wy»sza Szkoªa Zawodowa w Pªocku, Polska March 10, 2015

Table of contents

Co w tym wykªadzie Wprowadzenie do procesów aplikacji i identykatorów u»ytkowników Cykl»ycia aktywno±ci Obsªuga stanu egzemplarzy klasy aktywno±ci Wprowadzenie do zada«i pokrewie«stwo zada«

Techniczna denicji pojedynczej aplikacji Aplikacja na Android (w technicznym uj ciu) obejmuje wszystkie komponenty uruchomione z tym samym identykatorem u»ytkownika i w jednym procesie oraz powi zane z nadrz dnym obiektem klasy Application. Obiekt ten peªni funkcj centralnego kontekstu dla wszystkich komponentów (aktywno±ci, usªug, odbiorników typu BroadcastReceiver i dostawców tre±ci). Wszystkie te elementy s ª czone w plik APK.

Cykl»ycia aplikacji Ka»da aplikacja na Android jest zapisywana w obiekcie klasy Application. Cykl»ycia obiektu klasy Application 1 W momencie uruchamiania aplikacji wywoªywana jest metoda oncreate. 2 Kiedy system» da od aplikacji przywrócenia mo»liwych zasobów, wywoªywana jest metoda onlowmemory. 3 Czasem w momencie zatrzymywania aplikacji wywoªywana jest metoda onterminate. 4 Kiedy w trakcie dziaªania aplikacji zmienia si konguracja urz dzenia, wywoªywana jest metoda oncongurationchanged Wa»n kwesti zwi zan z obiektami klasy Application jest to,»e s one tworzone w momencie uruchamiania caªej aplikacji, ale nie s usuwane do czasu jej zamkni cia. S trwalsze od aktywno±ci, usªug, odbiorników typu Broadcast Receiver i innych komponentów. Android dla ka»dej aplikacji stosuje odr bny proces i identykator u»ytkownika.

Identykator u»ytkownika, proces i w tki aplikacji Kiedy u»ytkownik po raz pierwszy» da komponentu (klasy Activity, Service, BroadcastReceiver lub ContentProvider ) aplikacji na Android, jest ona uruchamiana z unikatowym identykatorem u»ytkownika (identykatory u»ytkownika to zwykle app_n, gdzie warto± n jest zwi kszana dla ka»dej aplikacji) i umieszczana w nowym procesie systemowym powi zanym z tym identykatorem. Ka»dy proces domy±lnie dziaªa w jednym w tku gªównym (klasa Thread). W tek gªówny jest cz sto nazywany w tkiem interfejsu u»ytkownika, jest to jednak myl ce okre±lenie, poniewa» oprócz aktywno±ci z w tku korzystaj tak»e odbiorniki typu BroadcastReceiver, dostawcy tre±ci i usªugi. Cho Android udost pnia sensowne i ªatwe w u»yciu ustawienia domy±lne, to jednocze±nie zapewnia peªn kontrol : mo»na uruchomi kilka aplikacji w tym samym procesie lub z wykorzystaniem tego samego identykatora u»ytkownika. Mo»na te» uruchomi jedn aplikacj w kilku procesach.

Priorytety procesów Priorytet: 1 Dziaªaj cy na pierwszym planie Proces z aktywno±ci, z której korzysta u»ytkownik, z usªug powi zan z u»ywan aktywno±ci, z usªug wykonuj c jedn z metod obsªugi cyklu»ycia lub z dziaªaj cym odbiornikiem typu BroadcastReceiver. Priorytet: 2 Widoczny Proces, który nie jest u»ywany na pierwszym planie, ale obejmuje aktywno± potencjalnie wpªywaj c na wygl d ekranu lub usªug powi zan z tego rodzaju aktywno±ci. Priorytet: 3 Usªuga Proces obejmuj cy usªug uruchomion za pomoc metody startservice (i który nie speªnia kryteriów dla procesów z pierwszego planu i widocznych). Priorytet: 4 Dziaªaj cy w tle Proces obejmuj cy zatrzyman aktywno±. Istnie mo»e wiele procesów tego rodzaju. Priorytet: 5 Pusty Proces, który nie obejmuje aktualnych komponentów aplikacji.

Cykle»ycia Cykl»ycia innych komponentów Komponenty odbiorników typu BroadcastReceiver, usªug i dostawców tre±ci (podobnie jak aktywno±ci) s domy±lnie wi zane z gªównym procesem aplikacji. Cho korzystaj z tego samego procesu, maj inny cykl»ycia (z innymi metodami). Jednym z najwa»niejszych aspektów pisania aplikacji na Android jest cykl»ycia aktywno±ci.

Cykl»ycia aktywno±ci Aktywno±ci maj trzy hierarchiczne etapy cyklu»ycia: caªy cykl»ycia (od utworzenia do usuni cia), cykl»ycia w stanie widoczno±ci (od ponownego uruchomienia do zatrzymania), cykl»ycia w stanie dziaªania na pierwszym planie (od wznowienia do wstrzymania). img_001.png

Metody cyklu»ycia Denition (oncreate) Wywoªywana przy pocz tkowym tworzeniu aktywno±ci. To tu nale»y przeprowadzi standardow statyczn konguracj utworzy widoki, powi za dane z listami itd. Udost pnia te» obiekt klasy Bundle obejmuj cy wcze±niej zamro»ony stan aktywno±ci (je±li taki obiekt istnieje). Nast pn metod zawsze jest onstart.

Metody cyklu»ycia Denition (onrestart) Wywoªywana po zatrzymaniu aktywno±ci, ale przed jej ponownym uruchomieniem. Nast pn metod zawsze jest onstart.

Metody cyklu»ycia Denition (onstart) Wywoªywana, kiedy aktywno± staje si widoczna dla u»ytkownika. Nast pn metod jest onresume, je±li aktywno± zaczyna dziaªa na pierwszym planie, lub onstop, je»eli jest ukrywana.

Metody cyklu»ycia Denition (onresume) Wywoªywana, kiedy aktywno± wchodzi w interakcje z u»ytkownikiem. Na tym etapie aktywno± znajduje si na szczycie stosu aktywno±ci i traaj do niej dane wej±ciowe od u»ytkownika. Nast pn metod zawsze jest onstart.

Metody cyklu»ycia Denition (onpause) Wywoªywana, kiedy system ma zacz wznawianie wcze±niejszej aktywno±ci. Zwykle zatwierdzane s wtedy niezapisane zmiany w trwaªych danych, zatrzymywane s animacje oraz inne operacje obci»aj ce procesor itd. Metoda musi dziaªa szybko, poniewa» nast pna aktywno± nie zostanie wznowiona do czasu zwrócenia sterowania przez t metod. Nast pn metod jest onresume, je±li aktywno± zaczyna dziaªa na pierwszym planie, lub onstop, je»eli jest ukrywana.

Metody cyklu»ycia Denition (onstop) Wywoªywana, kiedy aktywno± nie jest widoczna dla u»ytkownika, poniewa» inna aktywno± zostaªa wznowiona i zakrywa dan. Mo»e to by wynik uruchomienia nowej aktywno±ci, przeniesienia innej istniej cej aktywno±ci przed dan lub usuwania danej aktywno±ci. Nast pn metod jest onrestart, je±li dana aktywno± ponownie wchodzi w interakcje z u»ytkownikiem, lub ondestroy, je»eli aktywno± jest usuwana.

Metody cyklu»ycia Denition (ondestroy) Jest to ostatnie wywoªanie zgªaszane przed usuni ciem aktywno±ci. Mo»e to mie miejsce z powodu ko«czenia pracy aktywno±ci (wywoªania dla niej metody nish ) lub z uwagi na tymczasowe usuni cie danego egzemplarza aktywno±ci przez system w celu odzyskania zasobów. Do rozró»niania tych sytuacji sªu»y metoda isfinishing.

Metody cyklu»ycia Klasa bazowa public abstract class LifecycleActivity extends Activity { private static final String LOG_TAG = "LifecycleExplorer"; private NotificationManager notifymgr; private boolean enablenotifications; private final String classname; public LifecycleActivity() { super(); this.classname = this.getclass().getname(); public LifecycleActivity(final boolean enablenotifications) { this(); this.enablenotifications = enablenotifications;

Metody cyklu»ycia @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); notifymgr = (NotificationManager) getsystemservice(context.notification_service); debugevent("oncreate"); @Override protected void onstart() { debugevent("onstart"); super.onstart(); @Override protected void onresume() { debugevent("onresume"); super.onresume(); Klasa bazowa

Metody cyklu»ycia Klasa bazowa @Override protected void onpause() { debugevent("onpause"); super.onpause();

Metody cyklu»ycia Klasa bazowa private void debugevent(final String method) { long ts = System.currentTimeMillis(); Log.d(LOG_TAG, " *** " + method + " " + classname + " " + ts) if (enablenotifications) { Notification notification = new Notification(android.R.drawable.star_big_on, "Zdarzenia cyklu»ycia: " + method, 0L); RemoteViews notificationcontentview = new RemoteViews(getPackageName(), R.layout.custom_notification_layout); notification.contentview = notificationcontentview;

Metody cyklu»ycia Klasa bazowa notification.contentintent = PendingIntent.getActivity(this, 0, null, 0); notification.flags = Notification.FLAG_AUTO_CANCEL; notificationcontentview.setimageviewresource( R.id.image, android.r.drawable.btn_star); notificationcontentview.settextviewtext( R.id.lifecycle_class, getclass().getname()); notificationcontentview.settextviewtext( R.id.lifecycle_method, method); notificationcontentview.settextcolor( R.id.lifecycle_method, R.color.black); notificationcontentview.settextviewtext( R.id.lifecycle_timestamp, Long.toString(ts)); notifymgr.notify((int) System.currentTimeMillis(), notifica

Metody cyklu»ycia Klasa gªówna, ekran gªówny aplikacji public class Main extends LifecycleActivity { private Button finish; private Button activity2; private Chronometer chrono; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); finish = (Button) findviewbyid(r.id.finishbutton); finish.setonclicklistener(new OnClickListener() { public void onclick(view v) { finish(); );

Metody cyklu»ycia Klasa gªówna, ekran gªówny aplikacji activity2 = (Button) findviewbyid(r.id.activity2button); activity2.setonclicklistener(new OnClickListener() { public void onclick(view v) { startactivity(new Intent(Main.this, Activity2.class)); ); chrono = (Chronometer) findviewbyid(r.id.chronometer); @Override protected void onresume() { super.onresume(); chrono.setbase(systemclock.elapsedrealtime()); chrono.start();

Metody cyklu»ycia Klasa gªówna, ekran gªówny aplikacji @Override protected void onpause() { chrono.stop(); super.onpause();

Zmiany konguracji Puªapk, na któr trzeba uwa»a w Androidzie, jest to,»e przy zmianie konguracji system domy±lnie usuwa i odtwarza bie» c aktywno±. Poniewa» zmiana orientacji (z pionowej na poziom lub na odwrót) tak»e jest rodzajem zmiany konguracji, prowadzi to do wielu operacji usuwania i odtwarzania aktywno±ci. Ma to miejsce za ka»dym razem, kiedy u»ytkownik obraca telefon lub wysuwa klawiatur.

Zapisywanie i odtwarzanie stanu egzemplarza Stan egzemplarza (ang. instance state) to stan, który aktywno±ci musz same przywróci do postaci, w jakiej u»ytkownik go pozostawiª. Najwa»niejsze jest to,»e stan egzemplarza jest zapisywany wtedy, kiedy to system (a nie programista) usuwa aktywno±. Stan egzemplarza jest zachowywany w obiekcie klasy Bundle. Jest to pakiet danych typu Parcelable (mo»na je przekazywa mi dzy procesami). Mo»e obejmowa dane typów prostych, ªa«cuchy znaków i tablice elementów tych typów. Mo»liwe jest te» przekazywanie innych typów Parcelable. System zapisuje sensowne informacje domy±lne na temat stanu egzemplarza, mo»na jednak przesªoni metod onsaveinstancestate i zast pi j lub wzbogaci. Elementy s odtwarzane albo w metodzie oncreate, która przyjmuje jako dane wej±ciowe obiekt klasy Bundle, albo w metodzie onrestoreinstancestate. Do odtwarzania warto±ci najcz ±ciej stosuje si metod oncreate, jednak mo»na te» u»y metody onrestoreinstancestate, co pozwala oddzieli odtwarzanie od inicjowania innych komponentów.

Zapisywanie i odtwarzanie stanu egzemplarza private static final String COUNT_KEY = "ckey"; private TextView numresumes; private int count; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity3); numresumes = (TextView) findviewbyid(r.id.numresumes); @Override protected void onresume() { super.onresume(); numresumes.settext(string.valueof(count)); count++;

Zapisywanie i odtwarzanie stanu egzemplarza @Override protected void onrestoreinstancestate(bundle savedinstancestate) if ((savedinstancestate!= null) && savedinstancestate.containskey(count_key)) { count = savedinstancestate.getint(count_key); super.onrestoreinstancestate(savedinstancestate); @Override protected void onsaveinstancestate(bundle outstate) { outstate.putint(count_key, count); super.onsaveinstancestate(outstate);

Korzystanie ze stanu egzemplarza niezwi zanego z konguracj Stan egzemplarza niezwi zany z konguracj to dowolne rozbudowane dane o stanie, które trzeba przekaza z bie» cego egzemplarza aktywno±ci do jego przyszªego odpowiednika, tworzonego w wyniku wprowadzenia zmian w konguracji. Technika ta dotyczy tylko bie» cego egzemplarza oraz egzemplarza odtwarzanego natychmiast po usuni ciu pierwotnego. Ponadto trzeba uwa»a, aby nie przekazywa danych w rodzaju ªa«cuchów znaków, elementów gracznych lub innych zasobów, które mog ulec zmianie w wyniku modykacji konguracji. W ko«cu omawiana technika dotyczy stanu niezwi zanego z konguracj.

Zapisywanie i odtwarzanie stanu egzemplarza @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity3); numresumes = (TextView) findviewbyid(r.id.numresumes); Date date = (Date) this.getlastnonconfigurationinstance(); if (date!= null) { Toast.makeText(this, "Obiekt \"LastNonConfiguration\": " + date, Toast.LENGTH_LONG).show(); [...] @Override public Object onretainnonconfigurationinstance() { return new Date();

Wykonywanie operacji za pomoc zada«w ten sposób zacieraj si granice mi dzy aplikacjami. Dla u»ytkownika aplikacja skªada si z aktywno±ci z ró»nych miejsc (map, przegl darki, klienta pocztowego, kontaktów i aparatu fotogracznego to tylko kilka wbudowanych mo»liwo±ci). Wa»ny jest cel u»ytkownika niezale»nie od tego, jak wiele komponentów sªu»y do jego realizacji. W Androidzie takie operacje z udziaªem wielu aplikacji to zadania. Omówiono ju» techniczn denicj grupy komponentów z jednego podstawowego pakietu spakowanego do pliku APK. Jest to aplikacja na Android. Jednak, jak wcze±niej wspomniano, u»ytkownik nie postrzega aplikacji w ten sposób. Dla u»ytkownika aplikacja skªada si ze wszystkich aktywno±ci potrzebnych do wykonania operacji. W Androidzie takie grupy aktywno±ci to zadania. Zadanie jest zawsze uruchamiane przez jedn aktywno± tak zwan aktywno± gªówn. Aktywno± gªówna jest zwykle uruchamiana z poziomu ekranu gªównego (aplikacji Launcher). Nast pnie ka»da aktywno± zwi zana z zadaniem jest dodawana do stosu aktywno±ci zadania, a caªe zadanie system traktuje jak odr bn jednostk. Aktywno±ci wywoªywane przez aplikacj ª czy pokrewie«stwo z zadaniem.

Podsumowanie W tym rozdziale skoncentrowano si na tym, czym s aplikacje na Android i jak wygl da cykl»ycia aktywno±ci. Aktywno±ci s podstawowym komponentem ka»dej aplikacji na Android, a tworzenie i usuwanie elementów w ramach cyklu»ycia aktywno±ci ma bardzo du»e znaczenie. Oprócz znajomo±ci cyklu»ycia niezwykle istotna jest te» wiedza o tym, jak zapisywa i odtwarza stan egzemplarzy aktywno±ci. Od tego mo»e zale»e komfort pracy u»ytkowników. Zarz dzanie cyklem»ycia w ±rodowisku, które nie gwarantuje dziaªania aplikacji do czasu jej zamkni cia, a zamiast tego usuwa i tworzy komponenty na» danie, bywa skomplikowane. Inn wa»n kwesti jest grupowanie przez Android aktywno±ci wedªug celów u»ytkownika (niezale»nie od aplikacji, z których te aktywno±ci pochodz ). System traktuje takie grupy jak odr bne zadania. S one istotne, poniewa» stanowi logiczne punkty nawigacyjne dla u»ytkowników i dzi ki stosowi aktywno±ci umo»liwiaj powrót do punktu wyj±cia.