Programowanie usług działających w tle



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

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

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

Programowanie dla Androida. Ubiquitous

Intencje nadawcze. Aktywności mogą rozsyłać komunikaty do wszystkich zainstalowanych aplikacji

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

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

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

akademia androida Pierwsze kroki w Androidzie część I

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

SOP System Obsługi Parkingów

Android i Bluetooth Low Energy. Laboratorium 4 Niestacjonarne

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

Dokumentacja techniczna

Programowanie dla Androida

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

akademia androida Http i AsyncTask część VII

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Wypożyczalnia VIDEO. Technologie obiektowe

Mechanizmy pracy równoległej. Jarosław Kuchta

Systemy operacyjne na platformach mobilnych

Wstęp do programowania 2

WSTĘP DO ANDROIDA. Laboratorium

komunikator na platformę Android wspierający protokół GG

Programowanie dla Androida. Ubiquitous

I. Usługi. Usługa może przyjąć dwie formy:

Fragmenty są wspierane od Androida 1.6

Android tworzenie aplikacji mobilnych

Programowanie aplikacji dla Sklepu Windows w języku C#

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

Podstawowe elementy GUI - zadania

Programowanie urządzeń mobilnych. projekt 6 ( )

Przechowywanie danych

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

Bazy danych 2. Wykład 1

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

Konspekt pracy inżynierskiej

Serwery Statefull i Stateless

Diagnostyka pamięci RAM

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Tworzenie aplikacji na platformie Android

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Programowanie obiektowe

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Wprowadzenie. Dariusz Wawrzyniak 1

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Język Java część 2 (przykładowa aplikacja)

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

SIMON SAYS ARCHITECTURE! Usługi zdalne. Technologie, techniki i praktyki implementacji

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

Programowanie na poziomie sprzętu. Programowanie w Windows API

Tworzenie i wykorzystanie usług

Android, wprowadzenie do SDK

Komunikacja i wymiana danych

Klient-Serwer Komunikacja przy pomocy gniazd

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

GUI - projektowanie interfejsów cz. II

Systemy operacyjne na platformach mobilnych

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

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Wątki jądra. Maciej Szwaja

Paweł Skrobanek. C-3, pok

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Architektura interfejsu użytkownika

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Instrukcja wczytywania i przekazywania zbiorów centralnych w Centralnej Aplikacji Statystycznej przez użytkowników podobszaru FA

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Dokument zawiera instrukcję samodzielnej Instalacji Microsoft SQL Server 2005 Express Edition Service Pack 3 na potrzeby systemu Sz@rk.

Biuletyn techniczny. Drukarki fiskalne w usługach terminalowych. Comarch OPT!MA Copyright 2007 COMARCH SA

SpriteKit. Biblioteka do tworzenia gier wbudowana w SDK. Wspiera grafikę 2D w oparciu o sprite y

Analiza i projekt systemu pracy grupowej z zastosowaniem metodyki SCRUM w technologii SharePoint Karolina Konstantynowicz

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Podstawy projektowania aplikacji biznesowych w systemie SAP R/3

5. Model komunikujących się procesów, komunikaty

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Wprowadzenie do projektu QualitySpy

Oracle PL/SQL. Paweł Rajba.

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

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

Transmisja danych pomiędzy E-MEA i E-CADENCIER z wykorzystaniem trybu PENDRIVE

Aktualizacja Firmware >>> Android Kit Kat

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Rozdział 1. Przegląd bramofonu SAFE

Android poradnik programisty

Alians AMReminder. Przypomnij kontrahentom o nierozliczonych płatnościach

OSGi Agata Hejmej

Wzorce logiki dziedziny

WIDEOREJESTRATOR LX-400G Z SYSTEMEM ANDROID

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Biuletyn techniczny. CDN OPT!MA 12.0 Drukarki fiskalne w usługach terminalowych. Copyright 2007 COMARCH SA

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Język Java część 2 (przykładowa aplikacja)

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Na chwilę obecną biblioteka ElzabObsluga.dll współpracuje tylko ze sprawdzarkami RSowymi.

Instrukcja wczytywania i przekazywania zbiorów centralnych w Centralnej Aplikacji Statystycznej przez użytkowników podobszaru SR

Mobilne aplikacje multimedialne

Transkrypt:

Programowanie usług działających w tle Android Paweł Szafer

Po co programować usługi działające w tle?

Plan prezentacji O aplikacjach w Androidzie, Sposób podejmowania decyzji o zabiciu procesu, Rodzaje procesów, Wątki, AsyncTask, Services, Service, unbound, bound, IntentService, Współdzielenie danych - ContentProvider, Komunikacja między procesami - BroadcastReceiver.

Aplikacje Domyślnie wszystkie aplikacje działają w obrębie tego samego procesu, Android może zdecydować o zabiciu aplikacji, gdy nie ma wystarczającej ilości pamięci dla aplikacji ważniejszej i/lub obsługującej użytkownika, Wszystkie komponenty aplikacji są niszczone (wywoływana metoda ondestroy() ).

Podejmowanie decyzji o zabiciu aplikacji W przypadku konieczności zabicia aplikacji tworzony jest ranking znaczenia aplikacji, tworzony w oparciu o: rodzaj komponentów działających w obrębie aplikacji, stan komponentów działających w obrębie aplikacji, Na podstawie powyższych danych tworzony jest ranking procesu. Im wyższy wynik tym mniej prawdopodobne zabicie aplikacji.

Rodzaje procesów 1. Foreground process, Activity, Service odwołujący się do Activity, które użytkownik aktualnie używa, Service, który został uruchomiony poprzez wywołanie metody startforeground(), Service, który jest w jednej z następujących metod: oncreate(), onstart(), ondestroy(). Ta kategoria prawie nigdy nie jest skierowana do zabicia.

Rodzaje procesów 2. Visible process - proces, który nie posiada żadnych elementów pierwszego planu (widocznych na ekranie), ale może wpływać na zawartość ekranu użytkownika np. Activity, które jest w metodzie onpause() (w tle), Service, który współpracuje z Acitivty (będące procesem pierwszoplanowym lub widocznym). Procesy w tej kategorii są ekstremalnie ważne, a task killer w przypadku, gdy musi któryś z nich zabić, stara się zawsze poczekać aż zakończą one swoje działania.

Rodzaje procesów 3. Service proces, który implementuje klasę Service, rozpoczęty poprzez wywołanie metody startservice(), nie może zostać zakwalifikowany do żadnej z wcześniejszych kategorii, użytkownik nie może widzieć jego działania, Przykład: odtwarzanie muzyki, pobieranie danych z sieci.

Rodzaje procesów 4. Background process: Activity, które nie jest aktualnie widoczne na ekranie (zatrzymane poprzez wywołanie onstop()), mogą zostać zatrzymane w każdym momencie działania, jeżeli system widzi taką potrzebę (np. zajmowanie pamięci dla procesów pierwszoplanowych, zbyt duże obciążenie procesora).

Rodzaje procesów 5. Empty process aplikacja, która nie posiada żadnych aktywnych komponentów, jedyny powód dla systemu, aby działała: w celu cache'owania, aby przy kolejnym uruchomieniu aplikacja mogła szybciej zostać uruchomiona.

Rodzaje procesów - podsumowanie 2 sytuacje: Wątek wywołany z Activity jest traktowany jako proces tła (4), Service wywołany z Activity ma ranking 3. Oznacza to, że lepiej uruchomić service, niż wątek (Activity, może oczekiwać w tle na zakończenie operacji wątku, który został zabity).

Worker threads Zasady: nigdy nie blokuj wątku interfejsu użytkownika, nie próbuj dostać się do komponentów wątku interfejsu użytkownika spoza niego. Po około 5 sekundach braku odpowiedzi z Activity pojawia się komunikat o braku odpowiedzi aplikacji. W związku z tym nie można (z kilkoma wyjątkami) wywoływać blokujących operacji wewnątrz interfejsu użytkownika

Worker threads Źle Zasada: nie próbuj dostać się do komponentów wątku interfejsu użytkownika spoza niego.

Worker threads Aby umożliwić modyfikowanie elementów interfejsu użytkownika wykorzystuje się metody: Activity.runOnUiThread(Runnable), View.post(Runnable), View.postDelayed(Runnable, long).

AsyncTask<Void, Void, Void> Przeznaczone do wywołania operacji asynchronicznych z poziomu interfejsu użytkownika, zadanie może być wywołane tylko jeden raz, posiada metody do interakcji z UI (onprogressupdate()), gdy Activity przechodzi do działania w tle, w AsyncTask wywoływana jest metoda doinbackground(), wówczas AsyncTask ma ranking 4 (background process).

Services klasa bazowa dla wszystkich Service, komponent aplikacji wykonujący długotrwałe operacje w tle, nie posiadający interfejsu użytkownika. aplikacja główna może zostać zamknięta, a service może nadal działać, inne aplikację mogą zarządzać usługą (np. w celu wyłączenia odtwarzania muzyki).

Podział service's Started (unbound) - usługa uruchomiona poprzez wywołanie metody startservice(). usługa może działać w tle dowolną ilość czasu, nawet gdy komponent ją uruchamiający został zabity, Service nie powinien zwracać wyników operacji do wywołującego ją komponentu, powinien sam się zatrzymać po wykonaniu operacji, dla każdej większej operacji powinien być zaprojektowany oddzielny Service (wiele czynności wykonywanych wewnątrz jednej usługi może zabierać za dużo pamięci i być w gorszej sytuacji w przypadku szukania procesu do zabicia przez system).

Podział service's Bound - service jest powiązany, gdy jest wywołana poprzez metodę bindservice(). Bound Service oferuje interfejs typu klient - serwer, dzięki któremu wiele komponentów może się z nią komunikować. Pozwala na: wysyłanie żądań, pobieranie wyników, umożliwia komunikację między kilkoma procesami. Ten rodzaj usługi działa tak długo, aż jakikolwiek proces jest do niej podłączony. Naraz, standardowo może być podłączona dowolna ilość procesów.

Podział service's Oba rodzaje tj. Started i Bound mogą być zaimplementowane w jednej usłudze. Service również podlega pod systemowe sprawdzanie czy aplikacja nie została zawieszona (Application Not Responding error), co oznacza, że w przypadku operacji blokujących lub mających duże zapotrzebowanie na czas procesora wewnątrz usługi powinien być zaimplementowany oddzielny wątek na ich wykonanie.

Service - implementacja

IntentService klasa wywodząca się z Service, sama uruchamia wątek wywołujący żądanie, IntentService nie obsługuję wielokrotnego, współbieżnego wywołania (tylko jeden wątek w tym samym czasie), główna zaleta - konieczność zaimplementowania jednej metody onhandleintent().

IntentService - implementacja

Zarządzanie współdzielonymi danymi ContentProvider - zarządza współdzielonymi danymi. Dane mogą być przechowywane w sieci, w bazie danych SQLite. Implementuje metody do zarządzania współdzielonymi danymi (np. insert, query, delete, update), ContentResolver - zapewnia komunikację aplikacji z ContentProvider'em. Zazwyczaj nie jest konieczny do samodzielnej implementacji Żadna z powyższych klas nie implementuje interfejsu użytkownika.

Zarządzanie współdzielonymi danymi ContentObserver - informuje zarejestrowane aplikację o zmianie danych przez ContentProvider'a, DataSetObserver - informuję o wywołaniu metody w ContentResolver, czyli również o odczycie danych i próbie dostępu (nawet jeżeli jest nieudana). Żadna z powyższych klas nie implementuje interfejsu użytkownika.

Komunikacja między procesami/aplikacjami BroadcastReceiver: służy do rozgłaszania informacji np. Service może poinformować aplikację o zakończeniu pobierania, nie implementuje interfejsu użytkownika, może stworzyć powiadomienie na pasku powiadomień, zazwyczaj służy jedynie jako brama do komunikacji między komponentami np. w przypadku wystąpienia określonego wydarzenia może uruchomić zdefiniowany Service.

KONIEC Materiały: http://developer.android.com