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

Wielkość: px
Rozpocząć pokaz od strony:

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

Transkrypt

1 I. Usługi Usługa (Service) jest komponentem aplikacji, który pozwala wykonywać w tle długodziałające operacje, które nie dostarczają żadnego interfejsu użytkownika. Komponent aplikacji może uruchomić usługę, która będzie kontynuowała swoje działanie nawet gdy użytkownik przełączy się do innej aplikacji. Dodatkowo, komponent aplikacji może związać się z usługą aby komunikować się z nią oraz wymieniać z nią dane. Dla przykładu, usługa może obsługiwać transakcje w sieci, odtwarzać muzykę, wykonywać przetwarzanie plików lub komunikować się z dostawcą treści. Usługa może przyjąć dwie formy: Uruchomionej tzn. w przypadku gdy komponent aplikacji wywoła usługę metodą startservice(). Raz uruchomiona, usługa może działać w tle bez końca, nawet gdy komponent ją uruchamiający zostanie zniszczony. Zwykle usługi uruchomione w tej postaci wykonują prostą operację i nie zwracają żadnego rezultatu do komponentu wywołującego. W takiej formie usługa może służyć do pobierania lub wysyłania plików przez sieć. W przypadku gdy operacje zostaje zakończona, usługa powinna zatrzymać się samoczynnie. Związanej tzn. w przypadku gdy komponent aplikacji wywoła usługę metodą bindservice(). Usługa związana oferuje interfejs klient-serwer, który pozwala mu komunikować się z komponentami, wysyłać żądania, pobierać rezultaty. Usługa związana działa tak długo, jak długo inny komponent aplikacji jest z nią związany. Z jedną usługą mogą być związane wiele komponentów, jednak gdy wszystkie one zostaną odłączone od usługi, usługa jest niszczona. W praktyce jednak usługa może przyjąć zarówno postać uruchomionej jak i związanej. Może być zarówno uruchomiona jak i związana wszystko zależy od tego, jakie metody implementuje: onstartcommand(), który służy do uruchamiania usługi czy onbind(), która służy do jej związania z komponentem. Niezależnie do tego w jakiej formie usługa została zaimplementowana, komponent aplikacji może jej używać w takich sam sposób jak używane są aktywności poprzez uruchomienie jej z udziałem intencji. Należy zwrócić uwagę na pewne ograniczenia związane z mechanizmem usługi. Usługa funkcjonuje w głównym wątku procesu, który ją wywołał nie tworzy zatem własnego wątku ani nie funkcjonuje w osobnym procesie. Oznacza to, że jeżeli usługa będzie służyła do wykonywania pewnych czynności mocno obciążających procesor lub operacji blokujących aplikację (jak np. odtwarzanie plików MP3), powinien być dla niej utworzony osobny wątek. Poprzez wykorzystanie osobnych wątków dla usług, zmniejsza się ryzyko wystąpienia tzw. błędów ANR (Application Not Responding), polegających na nie odpowiadaniu na akcje użytkownika (potocznie zwane zawieszeniem aplikacji). W celu utworzenia usługi konieczne jest stworzenie klasy dziedziczącej po klasie Service (lub jej klasach potomnych). Implementacja powinna zawierać przesłonięte metody, które pozwolą obsłużyć cykl życia usługi oraz zapewnią, w razie konieczności, powiązanie usługi z komponentem aplikacji. Najważniejszymi metodami, które powinny zostać przesłonięte są: onstartcommand() system wywołuje tę metodę, w przypadku gdy inny komponent (np. aktywność) wywoła metodę startservice(). Gdy metoda ta zostanie wykonana, usługa zostaje uruchomiona i może działać w tle bez końca. Jeżeli metoda onstartcommand() zostanie zaimplementowana, obowiązek zatrzymania usług 1

2 spoczywa na programiście, który musi w odpowiedni sposób wywołać metodę stopself() bądź stopservice(). onbind() - system wywołuje tę metodę, w przypadku gdy inny komponent (np. aktywność) wywoła metodę bindservice(). We własnej implementacji metody, programista musi dostarczyć interfejs dla klienta, który pozwoli mu komunikować się z usługą, zwracają tzw. obiekt klasy IBinder. Ta metoda zawsze powinna być implementowana, jednak gdy usługa w zamierzeniu ma nie przyjmować formy związanej, metoda onbind() powinna zwracać wartość null. oncreate() system wywołuje tę metodę, kiedy usługa jest pierwszy raz tworzona. W tej metodzie zapewnia się procedury ustawienia funkcjonowania usługi (zanim zostaną wywołane metod onstartcommand() bądź onbind()). Jeżeli usługa jest już uruchomiona, ta metoda nie zostanie wywołana. ondestroy() system wywołuje tę metodę, kiedy usługa nie jest już wykorzystywana i należy ją zniszczyć. Własna implementacja tej metody powinna wprowadzać procedury oczyszczania zasobów wykorzystywanych przez usługę takich, jak wątki, zarejestrowani słuchacze, odbiorcy komunikatów, itd. System Android może wymusić zatrzymanie usługi tylko w przypadku niskich zasobów pamięci, które muszą zostać pozyskane dla aktywności, na której skupiony jest użytkownik. Jeżeli usługa została uruchomiona i działa już przez dłuższy czas, system obniża jej pozycję na liście zadań w tle, co powoduje zwiększenie prawdopodobieństwa jej usunięcia. Jeżeli usługa zostanie zniszczona, zostanie ponownie uruchomiona tak szybko jak to możliwe, tzn. gdy będą dostępne odpowiednie dla niej zasoby. Więcej informacji o usługach można znaleźć pod adresem: Przedstawiony tutaj przykład jest implementacją usługi pracującej w głównym procesie aplikacji oraz usługi, która obsługuje tryb wielu żądań i tworzy wiele oddzielnych wątków, które wykonują czynności i niezależnie samoczynnie się zatrzymują. Implementacja głównej klasy aplikacji została przedstawiona poniżej. public class MainActivity extends Activity implements OnClickListener{ private static final String TAG = "Aktywność"; Button buttonstart, buttonstop, buttonstart2; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); buttonstart = (Button) findviewbyid(r.id.button1); buttonstop = (Button) findviewbyid(r.id.button2); buttonstart2 = (Button) findviewbyid(r.id.button3); buttonstart.setonclicklistener(this); buttonstop.setonclicklistener(this); buttonstart2.setonclicklistener(this); 2

3 public void onclick(view v) { // TODO Auto-generated method stub switch (v.getid()) { case R.id.button1: Log.d(TAG, "onclick: uruchomienie usługi"); startservice(new Intent(this, MyService.class)); break; case R.id.button2: Log.d(TAG, "onclick: zatrzymanie usługi"); stopservice(new Intent(this, MyService.class)); break; case R.id.button3: startservice(new Intent(this, HelloService.class)); break; Główna klasa przykładowej aplikacji (aktywność MainActivity) implementuje interfejs OnClickListener, który posłuży do obsługi 3 przycisków znajdujących się w układzie aktywności. Przyciski Uruchom usługę i Zatrzymaj usługę (pola buttonstart i buttonstop ). Pole buttonstart2 związane jest z przyciskiem wywołującym usługę w nowym niezależnym wątku. W metodzie onclick dodatkowo wykorzystano klasę Log, która służy do wypisywania w zakładce LogCat (Eclipse) komunikatów pochodzących z urządzenia. Klasa posiada kilka metod, a wykorzystana tu metoda d wyświetla informacje debuggera, oznaczone poprzez wartość znajdującą się w stałej TAG, o treści przedstawionej w kodzie. Do klasy dodane zostały dwie usługi klasy MyService i HelloService, rozszerzające klasę Service. Klasa MyService implementuje usługę działającą w głównym wątku procesu aplikacji. Implementacja klasy HelloService opisuje usługę pracującą w trybie wielowątkowym, a jej struktura pochodzi ze strony: Poniżej zaprezentowana została implementacja klasy MySerivce. public class MyService extends Service { private static final String TAG = "Usługa"; private String mydate; public IBinder onbind(intent intent) { return null; public void oncreate() { mydate = java.text.dateformat.getdatetimeinstance().format(calendar.getinstance().gettime() ); Toast.makeText(this, "Usługa utworzona " + mydate, Toast.LENGTH_LONG).show(); Log.d(TAG, "oncreate"); public void ondestroy() { mydate = java.text.dateformat.getdatetimeinstance().format(calendar.getinstance().gettime() ); 3

4 Toast.makeText(this, "Usługa zniszczona " + mydate, Toast.LENGTH_LONG).show(); Log.d(TAG, "ondestroy"); public void onstart(intent intent, int startid) { Toast.makeText(this, "Usługa uruchomiona", Toast.LENGTH_LONG).show(); Log.d(TAG, "onstart"); Usługa MyService nie obsługuje trybu powiązania z komponentem, dlatego metoda onbind zwraca wartość null. W metodzie oncreate w kontrolce Toast wyświetlany jest odpowiedni komunikat o utworzeniu usługi, zawierający datę i czas tego zdarzenia (zmienna mydate ). W metodzie ondestroy i onstart również generowana jest kontrolka Toast, wyświetlająca stosowne informacje. Bardziej złożoną strukturę prezentuje klasa HelloService, reprezentująca usługę wielowątkową. W pierwszej kolejności pokazana została sekcja pól danych, w których zdefiniowano obiekty klas Looper i ServiceHandler. Klasa Looper reprezentuje pętle komunikatów związanych z danym wątkiem, w której pojawiają się różne komunikaty obsługiwane przez wątek. Klasa ServiceHandler jest w tym wypadku klasą rozszerzająca Handler, która obsługuje pętle komunikatu wątku, w którym powstał obiekt ServiceHandler. public class HelloService extends Service { private Looper mservicelooper; private ServiceHandler mservicehandler; // Handler który odbiera wiadomości z wątku private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); public void handlemessage(message msg) { // Uśpienie wątku na 5 sekund. long endtime = System.currentTimeMillis() + 5*1000; while (System.currentTimeMillis() < endtime) { synchronized (this) { try { wait(endtime - System.currentTimeMillis()); catch (Exception e) { // Usługa zostanie zatrzymana przy wykorystaniu startid //,aby nie zatrzymywać jej w trakcie obsługi innej czynności stopself(msg.arg1); Aby zasymulować jakąś czynność w metodzie handlemessage (która obsługuje komunikaty) zaimplementowano pętlę, w której za pomocą metody wait następuje zastopowanie wątku na czas wyrażony w postaci milisekund wprowadzonych jako argument metody. W pętli został wykorzystany tzw. blok zsynchronizowany (słówko synchronized ). Za pomocą tego wyrażenia możliwe jest blokowanie dostępu do bloku instrukcji znajdujących się dalej pomiędzy klamrami (metoda wait) przed referencją na obiekt podany jako argument metody synchronized. A więc synchronized(this) 4

5 {..blok blokuje dostęp do bloku przed obiektem klasy ServiceHandler. Po spełnieniu warunku pętli (odczekaniu 5 sekund) następuje zatrzymanie usługi o przekazanym argumencie strartid z komunikatu (klasa Message). Poniżej w metodzie oncreate tworzony jest wątek posiadający pętle komunikatów (Looper), będący obiektem klasy HandlerThread. Dla wątku ustawiany jest priorytet wykonywania w tle (THREAD_PRIORITY_BACKGROUND), a następnie za pomocą metody start, wątek jest uruchamiany. Kolejno tworzona jest pętla komunikatów (mservicelooper) oraz nowy obiekt klasy ServiceHandler, wykorzystujący wcześniej utworzoną pętlę komunikatów. Komunikat tworzony jest w metodzie onstartcommand, której implementację zaprezentowano poniżej. public int onstartcommand(intent intent, int flags, int startid) { Toast.makeText(this, "Usługa uruchomiona w oddzielnym wątku", Toast.LENGTH_SHORT).show(); // Przy każdorazowym uruchomieniu, wysyłany jest komunikat o rozpoczęciu pracy // oraz przesyłany jest identyfikator startu (startid), który jednoznacznie // pozwala stwierdzić, które usługi mają zostać zatrzymane w przypadku żądania. Message msg = mservicehandler.obtainmessage(); msg.arg1 = startid; mservicehandler.sendmessage(msg); gdy // Stała zapewniająca ponowny restart od tego miejsca, w przypadku, // usługa zostanie zniszczona. return START_STICKY; Obiekt klasy Message tworzony jest na podstawie komunikatu pozyskanego z pętli komunikatów wątku (mservicehandler). Następnie do zmiennej arg1 komunikatu, zapisywany jest identyfikator uruchomienia wątku (startid) i tak zmodyfikowana wiadomość (msg) trafia z powrotem do ServiceHandlera za pomocą metody sendmessage. Metoda onstartcomman zwraca stałą START_STICKY, która zapewnia restart usługi, w przypadku jej zniszczenia. Ostatnimi zaimplementowanymi metodami w klasie HelloService są metody onbind i ondestroy, przedstawione poniżej. public IBinder onbind(intent intent) { return null; public void ondestroy() { Toast.makeText(this, "Zakończono wykonywanie usługi", Toast.LENGTH_SHORT).show(); 5

6 Przykładowy ekran opisanej aplikacji przedstawiono na rys. 1. Uwidoczniono na nim moment generowania kontrolki Toast podczas wywołania metody oncreate dla usługi klasy MyService (uruchomionej w wątku aplikacji). Rys. 1 Przykładowy ekran aplikacji wykorzystującej usługi. Utworzenie usługi w głównym wątku aplikacji. Parokrotne kliknięcie w przycisk Uruchom usługę nic nie da, ponieważ wcześniejsza usługa musi zostać zatrzymana (należy kliknąć w przycisk Zatrzymaj usługę. Natomiast w odróżnieniu od usługi MyService, usługa wykonywana we własnym wątku, może być tworzona niezależnie. Stąd wielokrotne kliknięcie w przycisk Uruchom usługę w oddzielnym wątku powoduje utworzenie wielu wątków usług i ich systematyczne zakańczanie po 5 sekundach, w kolejności kliknięcia. II. AsyncTask Podczas uruchamiania komponentu aplikacji, w przypadku gdy aplikacja nie posiada innych działających komponentów, system Android uruchamia dla aplikacji nowy proces linuksowy, wykonywany jednowątkowo. Domyślnie, wszystkie komponenty tej samej aplikacji funkcjonują w tym samym procesie i wątku (zwanym wątkiem głównym ). W przypadku gdy uruchamiany jest komponent aplikacji i istnieje już proces przydzielony tej aplikacji, komponent uruchomiony zostaje w tym procesie i wykorzystuje ten sam wątek do wykonywania operacji. Android może zadecydować w pewnym momencie wykonywania operacji o zakończeniu procesu, w przypadku gdy ilość dostępnej pamięci jest niska a inne procesu potrzebują pamięci, aby szybciej dostarczyć odpowiedź do użytkownika. Komponenty aplikacji uruchomione w procesie, który został zniszczony zostają również unicestwione. Zabity proces uruchamiany jest ponownie, w przypadku gdy pewne komponenty zażądają jego wykonania. System Android stara się zarządzać procesem aplikacji tak długo, jak to jest możliwe. Istnieją jednak sytuacje, w których usuwane są stare procesy w celu odzyskania pamięci dla nowych lub bardziej istotnych procesów. Aby określić, które procesy powinny zostać zachowane, a które zniszczone, systemu umieszcza je wszystkie w tzw. hierarchii ważności, bazującej na komponentach działających w tym procesie oraz stanie tych komponentów. Procesy o najniższej ważności są 6

7 eliminowane jako pierwsze, następnie w razie konieczności, usuwane są procesy na kolejnym poziomie ważności, itd. Hierarchia ważności procesu podzielona została na 5 rodzajów procesów, które mogą być usunięte przez system (w kolejności od najbardziej istotnego po najmniej istotny): Proces pierwszego planu jest wymagany do operacji, wykonywanych na bieżąco przez użytkownika, Proces widoczny proces nie posiadających żadnych komponentów na pierwszym planie wykonania, jednak mający ciągły wpływ na to, co dzieje się na ekranie, Proces usługi proces, który przetwarza usługę wywołaną za pomocą metody startservice, który nie został jeszcze zdegradowany na jeden z dwóch poniższych poziomów, Proces tła proces przechowujący aktywność, która nie jest aktualnie widoczna dla użytkownika, a więc nie ma bezpośredniego wpływu na to, co wykonuje użytkownik. Pusty proces proces, który nie przechowuje żadnych aktywnych komponentów aplikacji. Jedynym powodem nie niszczenia tego procesu są mechanizmy pamięci podręcznej, które mogą być z nim związane (skracają np. czas wywołania innych komponentów). Kiedy aplikacja jest uruchomiona, system tworzy wątek wykonania dla aplikacji, którego potocznie nazywa się wątkiem głównym. Jest to bardzo ważny wątek odpowiedzialny za kontrolę zdarzeń generowanych przez odpowiednie elementy interfejsu użytkownika, włączając w to proces rysowania. Jest to również wątek, w którym aplikacja współpracuje z komponentami pochodzącymi z zestawy Android UI (User Interface). W związku z tym, główny wątek jest często nazywany wątkiem interfejsu użytkownika (UI). System nie tworzy oddzielnych wątków dla każdej instancji komponentu wszystkie komponenty uruchomione w tym samym procesie są przetwarzane w wątku UI i to właśnie w nim następuje komunikacja pomiędzy komponentami a systemem. W konsekwencji, metody, które reagują na sprzężenia zwrotne systemu (np. metody nasłuchiwaczy kliknięcia czy wciśnięcia klawisza) zawsze uruchomione są w wątku UI procesu aplikacji. Kiedy aplikacja wymaga intensywnej pracy, której wyniki są potwierdzone w postaci interakcji z użytkownikiem, model jednowątkowy może przynieść duży spadek wydajności aplikacji. Jeżeli wszystkie operacja przetwarzane są w głównym wątku UI, przetwarzanie operacji wymagających czasu (np. zapytanie do bazy danych) może powodować blokadę całego interfejsu aplikacji. Kiedy wątek UI jest blokowany, nie obsługuje żadnych żądań, włączając w to operacji rysowania. Z punktu widzenia użytkownika, aplikacja się zawiesza. W przypadku, gdy blokada głównego wątku trwa dłużej niż ok. 5 sekund, użytkownik może zobaczyć na ekranie okno dialogowe, mówiące o błędzie ANR (Application Not Responding). Dobrym rozwiązaniem w przypadku operacji dłużej przetwarzanych, jest wykorzystanie tzw. zadania asynchronicznego klasy AsyncTask. AsyncTask pozwala wykonywać operacje mogące blokować wątek główny, w tzw. wątkach roboczych, a następnie publikować wyniki w do wątku UI, bez konieczności implementacji obsługi wątków oraz ich handlerów do obsługi komunikatów. 7

8 Aby wykorzystać możliwości AsyncTask, należy stworzyć podklasę dla AsyncTaska i zaimplementować kilka metod, związanych z przetwarzaniem i wyświetlaniem wyników pracy wątku. W pierwszej kolejności należy zaimplementować metodę doinbackground, w której wykonuje się operacje w przestrzeni wątku w tle. Do aktualizacji interfejsu, powinna zostać zaimplementowana metoda onpostexecute, która dostarcza wyników z metody doinbackground i działa wątku głównym. Zadanie może zostać uruchomione poprzez wywołanie metody execute w głównym wątku aplikacji. Zasady przetwarzania AsyncTask wygląda następująco: Określa się typy parametrów, wartości postępu oraz wynikowe wartości zadania, przy wykorzystaniu typów wbudowanych, Metoda doinbackground jest automatycznie wykonywana w wątku roboczym, Metody onpreexecute, onpostexecute i onprogressupdate są wywoływane z wątku UI, Wartość zwrócona przez metodę doinbackground jest wysyłana do metody onpostexecute, Metoda publishprogress może być wywołana w metodzie doinbackground w dowolnym momencie, aby wywołać metodę onprogressupdate z głównego wątku aplikacji (wątku UI), Zadanie AsyncTask może być anulowane w dowolnym momencie przez dowolny wątek. Dla zaprezentowania mechanizmu zadania AsyncTask zaimplementowano pokazową aplikację, które symuluje wykonywanie określonej czynności w czasie podanym jako parametr przez użytkownika. Dodatkowo postęp wykonania jest ukazany z wykorzystaniem kontrolki paska postępu (ProgressBar). W opisywanej dalej aplikacji utworzona została aktywność AsyncMainActivity z wewnętrzną klasą AsyncTaskRunner. Poniżej zaprezentowano sekcję pól klasy AsyncMainActivity oraz implementację metody oncreate i onclick. W klasie zdefiniowano obiekt dla kontrolek Button, EditText, TextView oraz ProgressBar. Przycisk służy do uruchomienia zadania klasy AsyncTaskRunner. W kontrolce EditText użytkownik wprowadza liczbę milisekund, definiującą czas wykonania zadania. W kontrolce TextView oraz ProgressBar udostępniane są wyniki uzyskane z zadania AsyncTaskRunner. W metodzie oncreate tworzone są obiekty kontrolek interfejsu oraz ustawiany jest anonimowy nasłuchiwacz kliknięcia dla przycisku. Metoda onclick interfejsu OnClickListener tworzy obiekt klasy AsyncTaskRunner, pobiera wartość wpisaną przez użytkownika w polu edycyjnym, wywołuje zadanie (metoda execute) oraz zeruje pasek postępu. W metodzie execute, parametrem przekazanym do zadania jest obiekt przechowujący liczbę milisekund, podaną przez użytkownika w polu edycyjnym. public class AsyncMainActivity extends Activity { 8

9 private Button button; private EditText time; private TextView finalresult; private ProgressBar progressbar; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_async_main); time = (EditText) findviewbyid(r.id.et_time); button = (Button) findviewbyid(r.id.btn_do_it); finalresult = (TextView) findviewbyid(r.id.tv_result); progressbar = (ProgressBar)findViewById(R.id.progressBar1); progressbar.setprogress(0); button.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { AsyncTaskRunner runner = new AsyncTaskRunner(); String sleeptime = time.gettext().tostring(); runner.execute(sleeptime); progressbar.setprogress(0); ); Poniżej zaprezentowano implementację wewnętrznej klasy zadania asynchronicznego o nazwie AsyncTaskRunner, będącej podklasą AsyncTask. Początkowo przedstawiono nagłówek tej klasy oraz implementacje metody doinbackground. W klasie zdefiniowano pole resp przechowujące wyniki przetwarzania. W metodzie doinbackground wykonywana jest pętla symulująca wykonywanie operacji, w której na krótką chwilę (time/100) usypiany jest wątek zadania oraz wywoływana jest metoda publishprogress, przekazująca parametr w postaci zmiennej iteracyjnej pętli do metody onprogressupdate. Po wykonaniu metody doinbackground zwracany jest napis zapisany w polu resp. Zmienna przekazana jako parametr do zadania asynchronicznego, jest wcześniej zamieniana do postaci liczby całkowitej (Integer.parseInt). private class AsyncTaskRunner extends AsyncTask<String, Integer, String> { private String resp; protected String doinbackground(string... params) { try { int time = Integer.parseInt(params[0]); for (int i=0; i<=100; i++) { Thread.sleep(time/100); publishprogress(i); resp = "Zadanie wykonane"; catch (InterruptedException e) { e.printstacktrace(); resp = e.getmessage(); catch (Exception e) { e.printstacktrace(); resp = e.getmessage(); return resp; 9

10 Następnie zaimplementowane zostały w klasie AsyncTaskRunner pozostałe metody zadania, przedstawione poniżej. protected void onpostexecute(string result) { finalresult.settext(result); protected void onpreexecute() { protected void onprogressupdate(integer... progress) { progressbar.setprogress(progress[0]); finalresult.settext("zadanie wykonane w " + progress[0] + " %"); Metoda onpostexecute wywołana jest po skończeniu przetwarzania metody doinbackground, zwracającej wartość pola resp. Wartość ta jest następnie użyta jako parametr wejściowy metody onpostexecute, która ustawia wynikowy napis w kontrolce TextView. Metoda onprexecute nie została zaimplementowana. W niej należy wykonać pewne operacje potrzebne przed wykonaniem metody doinbackground (np. wywołanie okna dialogowego z paskiem postępu). W metodzie onprogressupdate aktualizowany jest widok kontrolek ProgressBar oraz TextView, z wykorzystaniem parametru przekazanego z metody doinbackground przy wywołaniu metody publishprogress. Aplikacja obrazuje postęp wykonania poprzez animację paska postępu. Jego definicja została zaimplementowana w pliku activity_async_main.xml, którego fragment przedstawiono poniżej. <ProgressBar android:id="@+id/progressbar1" style="?android:attr/progressbarstylehorizontal" android:progressdrawable="@drawable/progress_bar_states" android:layout_width="400dip" android:layout_height="50dip" android:layout_alignleft="@+id/tv_time" android:layout_marginright="9dip" android:layout_margintop="15dip" android:layout_marginleft="260dip" android:minheight="60dip" android:layout_centervertical="true" /> Dla paska postępu określono wbudowany styl poziomego paska postępu (właściwość style ) oraz wskazano na zasoby drawable, związane z wyglądem graficznym paska. Elementy te zostały zdefiniowane w pliku progress_bar_states.xml, którego zawartość przedstawiono poniżej. <layer-list xmlns:android=" <item android:id="@android:id/background"> <shape android:shape="rectangle"> <corners android:radius="10px" /> <gradient android:startcolor="#000001" android:centercolor="#0b131e" android:centery="0.25" 10

11 android:endcolor="#0d1522" android:angle="90" /> </shape> </item> <item <clip> <shape android:shape="rectangle"> <corners android:radius="10px" /> <gradient android:startcolor="#000000" android:centercolor="#ff0000" android:centery="0.5" android:endcolor="#000000" android:angle="90" /> </shape> </clip> </item> </layer-list> W pliku zdefiniowano listę elementów drawable zwaną layer-list. Elementy na tej liście są rysowane zgodnie z porządkiem listy, poczynając od góry do dołu (od elementu o najniższym indeksie do elementu o najwyższym indeksie). Początkowo będzie zatem rysowany element o id background w kształcie (<shape>) prostokątnym (<rectangle>) z zaokrąglonymi rogami (android:radius) i tłem w postaci gradientu (<gradient>). Następnie narysowany na nim zostanie element o id progress, z charakterystyką podobną do poprzedniego elementu, symbolizujący czerwony prostokąt z gradientem. Dodatkowo element o id progress otoczony został znacznikiem <clip>, który determinuje zmianę kształtu prostokąta (przycięcie) zgodnie z postępem wykonywanego zadania AsyncTaskRunner. Przykładowy ekran zaimplementowanej aplikacji przedstawiono na rys. 2. Po wpisaniu przez użytkownika liczby milisekund i kliknięciu w przycisk Uruchom AsyncTask, rozpoczyna się przetwarzanie zadania. Szybkość animacji paska postępu i zmian w kontrolce TextView uwarunkowana jest wartością wpisaną w polu edycyjnym. Rys. 2 Przykładowy ekran aplikacji wykorzystującej podklasę AsyncTask. 11

12 III. Bibliografia Arsoba, R. (2011). Programowanie urządzeń mobilnych. Zagadnienia podstawowe. Pobrano Czerwiec 12, 2012 z lokalizacji Conder S., D. L. (2011). Android. Programowanie aplikacji na urządzenia przenośne. Wydanie II. Gliwice: Helion. Geetha, S. (2011, Maj 17). Sai Geetha's Blog - Android. Pobrano Czerwiec 20, 2013 z lokalizacji Sai Geetha's Blog: Komatineni S., M. D. (2012). Android 3. Tworzenie aplikacji. Gliwice: Helion. Lee, W.-M. (2011). Beginning Android Application Development. Indianapolis: Wiley Publishing Inc. 12

akademia androida Http i AsyncTask część VII

akademia androida Http i AsyncTask część VII akademia androida Http i AsyncTask część VII agenda 1. 2. 3. 4. URLConnection i HttpURLConnection UI Thread i ANR AsyncTask Zadanie 1. URLConnection i HttpURLConnection Jest to klasa, dzięki której możemy

Bardziej szczegółowo

Programowanie usług działających w tle

Programowanie usług działających w tle 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

Bardziej szczegółowo

Tworzenie i wykorzystanie usług

Tworzenie i wykorzystanie usług Strona 1 Co to jest usługa w systemie Android? Usługi HTTP Obsługa wywołania HTTP GET Obsługa wywołania HTTP POST Obsługa wieloczęściowego wywołania HTTP POST Usługi lokalne Usługi zdalne Tworzenie usługi

Bardziej szczegółowo

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

akademia androida Service, BroadcastReceiver, ContentProvider część IV akademia androida Service, BroadcastReceiver, ContentProvider część IV agenda 1. BroadcastReceiver 2. Service 3. ContentProvider 4. Zadanie 1. 5. Zadanie 2 (domowe). 1. BroadcastReceiver BroadcastReceiver

Bardziej szczegółowo

Systemy operacyjne na platformach mobilnych

Systemy operacyjne na platformach mobilnych Systemy operacyjne na platformach mobilnych Wykład 3 Grzegorz Jabłoński, Piotr Perek Katedra Mikroelektroniki i Technik Informatycznych Zagadnienia wykładu Menu opcji ListActivity własny widok własny adapter

Bardziej szczegółowo

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

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku. Aktywności to podstawowe elementy związane z platformą Android. Dzięki poznaniu aktywności będziesz w stanie napisać pierwszą aplikację przeznaczoną na urządzenie mobilne. Po dodaniu kontrolek możesz w

Bardziej szczegółowo

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

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4 Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.

Bardziej szczegółowo

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

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz Ż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

Bardziej szczegółowo

akademia androida Intencje oraz URI część III

akademia androida Intencje oraz URI część III akademia androida Intencje oraz URI część III agenda 1. Czym są intencje i po co się ich używa? 2. Czym jest URI? 3. Zadanie 1. 4. Zadanie 2 (domowe). 1. Czym są intencje i po co się ich używa? Intencje

Bardziej szczegółowo

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

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

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

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2 Programowanie Urządzeń Mobilnych Część II: Android Wykład 2 1 Aplikacje w systemie Android Aplikacje tworzone są w języku Java: Skompilowane pliki programów ( dex ) wraz z plikami danych umieszczane w

Bardziej szczegółowo

Fragmenty są wspierane od Androida 1.6

Fragmenty są wspierane od Androida 1.6 W androidzie można tworzyć dynamiczne interfejsy poprzez łączenie w moduły komponentów UI z aktywnościami. Moduły takie tworzy się za pomocą klasy Fragment, która zachowuje się jak zagnieżdżone aktywności

Bardziej szczegółowo

Podstawowe elementy GUI - zadania

Podstawowe elementy GUI - zadania Podstawowe elementy GUI - zadania LIVE DEMO Proszę zainstalować (rozpakować) Eclipse ADT z https://developer.android.com/sdk/index.html Proszę pobrać przez SDK Manager wszystko dotyczące Androida 4.4.2.

Bardziej szczegółowo

Programowanie dla Androida. Ubiquitous

Programowanie dla Androida. Ubiquitous Programowanie dla Androida Ubiquitous Czas życia aktywności Obsługiwany przez metody: oncreate - wywoływana w momencie tworzenia aktywności - ma argument, w którym może otrzymać informacje o poprzednim

Bardziej szczegółowo

Powiadomienia w systemie Android

Powiadomienia w systemie Android Powiadomienia w systemie Android Powiadomienie to krótka wiadomość, która pozwala informować użytkownika o pewnych wydarzeniach pochodzących z aplikacji - będąc poza nią. Wykorzystane w odpowiedni sposób

Bardziej szczegółowo

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

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1 Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego

Bardziej szczegółowo

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

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout Ćwiczenie 7 Wykorzystanie układu LinearLayout Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z zasadami użycia układu graficznego LinearLayout oraz wykształcenie umiejętności zastosowania

Bardziej szczegółowo

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

Wątki w Android OS. Matt Rutkowski. GynSoft sp. z o.o. http://gynsoft.net matt@gynsoft.net Wątki w Android OS Matt Rutkowski GynSoft sp. z o.o. http://gynsoft.net matt@gynsoft.net Krótko o terminach związanych z Android OS... Android OS bazuje na Linuxie, każda aplikacja posiada własne User

Bardziej szczegółowo

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

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

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:

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: 1. Listener dla przycisku. 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: W linii 24 tworzymy globalną metodę mglobal_onclicklistener,

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog Android Wykład 3 1 Zdarzenia Klasa Application Powiadomienia Toast AlertDialog 2 Zdarzenia UI (UI Events) zapewniają programowi interakcje z użytkownikiem. Obiekty określają wzajemne oddziaływania z resztą

Bardziej szczegółowo

[Android] Podstawy programowania

[Android] Podstawy programowania Page 1 of 7 [Android] Podstawy programowania LinkiPrzewodnik z przykładamizasosbykrótka prezentacja wprowadzająca do budowy systemuprosta aplikacja z menu i dialogami, którą utworzymy tutaj krok po kroku

Bardziej szczegółowo

Podstawowe elementy GUI - zadania

Podstawowe elementy GUI - zadania Podstawowe elementy GUI - zadania LIVE DEMO Proszę stworzyć prostą aplikację do obliczania pól figur geometrycznych. To add images to the drawable forlder, right click on it, and select the Show in Explorer

Bardziej szczegółowo

akademia androida Pierwsze kroki w Androidzie część I

akademia androida Pierwsze kroki w Androidzie część I akademia androida Pierwsze kroki w Androidzie część I agenda Środowisko do pracy + emulator Struktura projektu z omówieniem Po co nam AndroidManifest.xml? Cykl życia aplikacji Zadanie 1. Kod, symulacja,

Bardziej szczegółowo

Aplikacje w Javie- wykład 11 Wątki-podstawy

Aplikacje w Javie- wykład 11 Wątki-podstawy 1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/

Bardziej szczegółowo

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

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie RESTful Android Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie Jacek Laskowski jacek@japila.pl http://www.jaceklaskowski.pl wersja 1.0, 08.12.2011 O prelegencie - Jacek Laskowski

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

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

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład dr Artur Bartoszewski 1 Aplikacje mobilne 1. Cykl życia aktywności Cykl życiowy Aktywności w systemie Android składa się z 7 stanów. 2 Aplikacje mobilne 3 Źródło: https://www.altkomakademia.pl oncreate()

Bardziej szczegółowo

Android, wprowadzenie do SDK

Android, wprowadzenie do SDK Android, wprowadzenie do SDK Wprowadzenie, konfguracja środowiska, narzędzia, pierwsze aplikacje. prowadzący: Piotr Szymański, student 3 roku informatyki Paweł Rejkowicz, student 1 roku Informatyki 1 Android

Bardziej szczegółowo

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

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o. Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o. 29.06.2015 2 Spis treści 1. Wymagania...4 2. Uprawnienia systemowe...4 3. Uprawnienie

Bardziej szczegółowo

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

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład dr Artur Bartoszewski 1 Intencje Intencje (obok Aktywności) są jednym z podstawowych komponentów z których zbudowane są aplikacje systemu Android. Są one odpowiedzialne przede wszystkim za obsługę rozkazów

Bardziej szczegółowo

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java: otwórz okienko Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU klasy wewnętrzne, lokalne i anonimowe biblioteka AWT zestaw Swing JFrame JPanel komponenty obsługa zdarzeń

Bardziej szczegółowo

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

Intencje nadawcze. Aktywności mogą rozsyłać komunikaty do wszystkich zainstalowanych aplikacji Intencje nadawcze Aktywności mogą rozsyłać komunikaty do wszystkich zainstalowanych aplikacji Jeżeli aktywność chce otrzymywać komunikaty, musi się zarejestrować Do odbioru komunikatów musimy stworzyć

Bardziej szczegółowo

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

komunikator na platformę Android wspierający protokół GG Piotr Spyra, Michał Urbaniak Praca Inżynierska 2010 Politechnika Poznańska Wydział Elektryczny, Informatyka http://code.google.com/p// O Projekcie Protokół GG Service Geolokalizacja Widżet Podsumowanie

Bardziej szczegółowo

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

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10 Programowanie Urządzeń Mobilnych Laboratorium nr 9,10 Android Temat 2 działanie złożonych aplikacji zawierających więcej niż jedno Activity Krzysztof Bruniecki 1 Wstęp Podczas laboratorium poruszona zostanie

Bardziej szczegółowo

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017 Wykład 8 10 maj 2017 Współbieżność Watki w JAVA-ie Współbieżność może być realizowana na poziomie systemu operacyjnego (procesy) lub na poziomie aplikacji (watki). W JAVA-ie powszechnie stosuje się watki.

Bardziej szczegółowo

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu

Bardziej szczegółowo

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44 Zaawansowane aplikacje internetowe EJB 1 Rozróżniamy dwa rodzaje beanów sesyjnych: Stateless Statefull Celem tego laboratorium jest zbadanie różnic funkcjonalnych tych dwóch rodzajów beanów. Poszczególne

Bardziej szczegółowo

Kurs programowania. Wykład 8. Wojciech Macyna

Kurs programowania. Wykład 8. Wojciech Macyna Wykład 8 Program bez watków, jeden procesor, trzy zadania Program z watkami, jeden procesor, trzy zadania Procesory wielordzeniowe, każde zadanie na osobnym procesorze Trzy zadania uruchomione w watkach

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University.

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University. Wykorzystanie usług Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University. Portions of this page are reproduced from

Bardziej szczegółowo

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

Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński Programowanie aplikacji dla technologii mobilnych mgr inż. Anton Smoliński Agenda Cykl życia aplikacji Struktura plików Plik AndroidManifest.xml Elementy aplikacji Activity Layout Intent BroadcastRecivers

Bardziej szczegółowo

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003 Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy

Bardziej szczegółowo

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

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o. Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o. Co dostajemy na starcie? pobieranie elementów widoku, rzutowanie: ( np. findbyid ) każde zdarzenie

Bardziej szczegółowo

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty

Bardziej szczegółowo

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1 Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,

Bardziej szczegółowo

Systemy operacyjne na platformach mobilnych

Systemy operacyjne na platformach mobilnych Systemy operacyjne na platformach mobilnych Wykład 2 Grzegorz Jabłoński, Piotr Perek Katedra Mikroelektroniki i Technik Informatycznych Zagadnienia wykładu Interfejs użytkownika Activity Views Resources

Bardziej szczegółowo

Obsługa SMS i telefonii

Obsługa SMS i telefonii Strona 1 Interfejsy API telefonii Wysyłanie wiadomości SMS Odbieranie wiadomości SMS Symulowanie nadchodzących wiadomości SMS Obsługa skrzynki wiadomości SMS Wysyłanie wiadomości e-mail Monitorowanie połączeń

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

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

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java   1 / 13 Klasy Klasa to grupa obiektów, które mają wspólne właściwości, a obiekt jest instancją klasy. Klasa w języku Java może zawierać: pola - reprezentują stan obiektu (odniesienie do pola z kropką), methods

Bardziej szczegółowo

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

Mechanizm powiadomień

Mechanizm powiadomień Mechanizm powiadomień Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University. Portions of this page are reproduced

Bardziej szczegółowo

Programowanie w JAVA Lab. 5 - Wątki. 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 7 x ) xy, 8,8

Programowanie w JAVA Lab. 5 - Wątki. 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 7 x ) xy, 8,8 Programowanie w JAVA Lab. 5 - Wątki 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 33 y 3 2 2 x x 3 y 7 x 3 33 7) 2 2 f x, y 1 x 3 1 x 2 1 y 7 x 3 3 33 2 112 y 3 7 x

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run(). Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Programy w Javie składają się z pakietów Pakiety zawierają definicje

Bardziej szczegółowo

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem. WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM NetBeans Wykonał: Jacek Ventzke informatyka sem. VI 1. Uruchamiamy program NetBeans (tu wersja 6.8 ) 2. Tworzymy

Bardziej szczegółowo

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera

Bardziej szczegółowo

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ) Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,

Bardziej szczegółowo

Mobilne aplikacje multimedialne

Mobilne aplikacje multimedialne Mobilne aplikacje multimedialne Laboratorium 1 Wyznaczanie orientacji urządzenia względem lokalnego układu odniesienia autor: Krzysztof Bruniecki Gdańsk, 2013-10-08 wersja 12 Wprowadzenie Platforma Android

Bardziej szczegółowo

Programowanie w Javie

Programowanie w Javie Programowanie w Javie Andrzej Czajkowski Lista nr 0 Debugger w Javie Celem ćwiczenia jest poznanie podstawowych funkcji narzędzia debugera (odpluskwiacz) w środowisku Eclipse. Po ukończeniu ćwiczenia student

Bardziej szczegółowo

Programowanie urządzeń mobilnych. projekt 6 ( )

Programowanie urządzeń mobilnych. projekt 6 ( ) Programowanie urządzeń mobilnych projekt 6 (05.01.2018) Usługi lokalizacyjne Jedną z powszechniejszych funkcjonalności wykorzystywanych przez liczne aplikacje przeznaczone dla urządzeń mobilnych jest możliwość

Bardziej szczegółowo

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

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty. AndroidManifest.xml Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty. Jednym z najważniejszych elementów jest element który deklaruje kompatybilność z innymi

Bardziej szczegółowo

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów

Bardziej szczegółowo

Aplikacje internetowe i rozproszone - laboratorium

Aplikacje internetowe i rozproszone - laboratorium Aplikacje internetowe i rozproszone - laboratorium Enterprise JavaBeans (EJB) Celem tego zestawu ćwiczeń jest zapoznanie z technologią EJB w wersji 3.0, a w szczególności: implementacja komponentów sesyjnych,

Bardziej szczegółowo

Zaawansowane aplikacje internetowe

Zaawansowane aplikacje internetowe Zaawansowane aplikacje internetowe EJB 1 Rozróżniamy dwa rodzaje beanów sesyjnych: Stateless Statefull Celem tego laboratorium jest zbadanie różnic funkcjonalnych tych dwóch rodzajów beanów. Poszczególne

Bardziej szczegółowo

Programowanie urządzeń mobilnych

Programowanie urządzeń mobilnych Programowanie urządzeń mobilnych Lista 2 Aktywności i zdarzenia Jak już wiemy, pojedyncza aktywność reprezentuje pojedynczy ekran z interfejsem użytkownika. W zdecydowanej większości przypadków, może poza

Bardziej szczegółowo

Programowanie na poziomie sprzętu. Programowanie w Windows API

Programowanie na poziomie sprzętu. Programowanie w Windows API Programowanie w Windows API Windows API Windows Application Programming Interface (API) to zestaw funkcji systemu operacyjnego Windows, które umożliwiają aplikacjom korzystanie z wszystkich usług systemu.

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

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

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout Ćwiczenie 8 Wykorzystanie układu RelativeLayout Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z zasadami użycia układu graficznego RelativeLayout oraz wykształcenie umiejętności zastosowania

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Wątki w Javie. Piotr Tokarski

Wątki w Javie. Piotr Tokarski Wątki w Javie Piotr Tokarski Wprowadzenie Co to są wątki? Co to są wątki? Każdy program ma przynajmniej jeden wątek Co to są wątki? Każdy program ma przynajmniej jeden wątek Wątki są po to, by symulować

Bardziej szczegółowo

akademia androida Składowanie danych część VI

akademia androida Składowanie danych część VI akademia androida Składowanie danych część VI agenda 1. SharedPreferences. 2. Pamięć wewnętrzna i karta SD. 3. Pliki w katalogach /res/raw i /res/xml. 4. Baza danych SQLite. 5. Zadanie. 1. SharedPreferences.

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Laboratorium Systemów Mobilnych. Wykład 1

Laboratorium Systemów Mobilnych. Wykład 1 Laboratorium Systemów Mobilnych 2015-02-27 Wykład 1 (Wstęp do programowania w systemie Android) Wojciech Wawrzyniak Zaliczenie wykładu i ćwiczeń Wykład omówienie zagadnień Ćwiczenie praktyczne zastosowanie

Bardziej szczegółowo

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS PROBLEMY TECHNICZNE Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS Jeżeli stwierdziłeś występowanie błędów lub problemów podczas pracy z programem DYSONANS możesz skorzystać

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

Programowanie Obiektowe GUI

Programowanie Obiektowe GUI Programowanie Obiektowe GUI Swing Celem ćwiczenia jest ilustracja wizualnego tworzenia graficznego interfejsu użytkownika opartego o bibliotekę Swing w środowisku NetBeans. Ponadto, ćwiczenie ma na celu

Bardziej szczegółowo

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie 1 czerwca 2009 Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie = bjects = database for objects w pełni obiektowa

Bardziej szczegółowo

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Program V-SIM tworzenie plików video z przebiegu symulacji

Program V-SIM tworzenie plików video z przebiegu symulacji Program V-SIM tworzenie plików video z przebiegu symulacji 1. Wprowadzenie Coraz częściej zdarza się, że zleceniodawca opinii prosi o dołączenie do opracowania pliku/ów Video z zarejestrowanym przebiegiem

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Laboratorium 7 Blog: dodawanie i edycja wpisów

Laboratorium 7 Blog: dodawanie i edycja wpisów Laboratorium 7 Blog: dodawanie i edycja wpisów Dodawanie nowych wpisów Tworzenie formularza Za obsługę formularzy odpowiada klasa Zend_Form. Dla każdego formularza w projekcie tworzymy klasę dziedziczącą

Bardziej szczegółowo

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

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów A Zasady współpracy Ocena rozwiązań 3.0 25 40 punktów 3.5 41 65 punktów 4.0 66 80 punktów 4.5 81 100 punktów 5.0 101 130 punktów Warunki zaliczenia przedmiotu Student uzyska ocenę zaliczającą (3.0) o ile

Bardziej szczegółowo

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Zadanie: Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Na kolejnych zajęciach projekt będzie rozwijana i uzupełniana o kolejne elementy omawiane

Bardziej szczegółowo