I. Usługi. Usługa może przyjąć dwie formy:
|
|
- Stanisław Marian Cybulski
- 6 lat temu
- Przeglądów:
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 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ółowoProgramowanie 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ółowoTworzenie 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ółowoakademia 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ółowoSystemy 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ółowoAktywnoś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ółowo1 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 pierwszy najpierw znajduje się w tle systemu gdzie otrzymuje
Bardziej szczegółowoakademia 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ółowoWą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ółowoProgramowanie 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ółowoFragmenty 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ółowoPodstawowe 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ółowoProgramowanie 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ółowoPowiadomienia 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ółowoAutor: 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ółowoProgramowanie 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ółowoWą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ółowoWspół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ółowoCiekawym 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ółowoWprowadzenie 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ółowoZdarzenia 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
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ółowoPodstawowe 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ółowoakademia 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ółowoAplikacje 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ółowoRESTful 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ółowoProgramowanie 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ółowodr 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ółowoAndroid, 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ółowoInstrukcja 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ółowodr 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ółowoJava: 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ółowoIntencje 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ółowokomunikator 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ółowoProgramowanie 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ółowoKurs 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ółowoJava. 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ółowoD:\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ółowoKurs 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ółowoInformatyka 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoTł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ółowoProgramowanie 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ółowoProgramowanie 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ółowoObliczenia 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ółowoSzybciej (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ółowoWykł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ółowoWspół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ółowoObiekt 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ółowoObiektowe 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ółowoSystemy 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ółowoObsł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ółowoMultimedia 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ółowoKlasy. 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ółowoNarzę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ółowoMechanizm 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ółowoProgramowanie 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ółowoKurs 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ółowoWą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ółowoJę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ółowoMarcin 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ółowoWYKONANIE 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ółowoWSNHiD, 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) 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ółowoDokumentacja 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ółowoDiagramy 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ółowoMobilne 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoAndroidManifest.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ółowoAplikacje 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ółowoAplikacje 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ółowoZaawansowane 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoAplikacje 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ółowoProgramowanie 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ółowo1. 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ółowoWą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ółowoakademia 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ółowoWykł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ółowoWywoł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ółowoLaboratorium 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ółowoPROBLEMY 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ółowoPHP 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ółowoProgramowanie 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ółowoWprowadzenie 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ółowoObiektowy 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ółowoWyją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ółowoProgramowanie 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ółowoProgram 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ółowoTEMAT : 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ółowoTechniki 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ółowoUML 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ółowoLaboratorium 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ółowoA 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ółowoZadanie 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