- promocja
Programowanie aplikacji dla Androida. The Big Nerd Ranch Guide. Wydanie III - ebook
Programowanie aplikacji dla Androida. The Big Nerd Ranch Guide. Wydanie III - ebook
Android jest systemem stworzonym dla urządzeń mobilnych. Pod jego kontrolą pracują smartfony, tablety, lodówki, telewizory i wszystko wskazuje na to, że internet rzeczy będzie również w dużej części androidowy. Wielu programistów widzi w tym niespotykane dotąd możliwości, jednak pisanie aplikacji dla Androida wcale nie jest łatwym zadaniem. Wielu programistów przekonało się, że sama umiejętność kodowania nie jest wystarczająca. Biegłe poruszanie się po tym środowisku wymaga opanowania licznych nowych koncepcji i technik. Innymi słowy, rozpoczynając naukę programowania dla Androida, trzeba nastawić się na intensywną naukę wielu nowych rzeczy w krótkim czasie!
Jeśli umiesz pisać zorientowany obiektowo kod w Javie i postanowiłeś zacząć tworzyć aplikacje dla Androida, wziąłeś do ręki odpowiednią książkę. Jest to praktyczny, przystępnie napisany przewodnik, który bezboleśnie przeprowadzi Cię przez trudności, jakie napotyka właściwie każdy początkujący programista aplikacji dla Androida. Opisano tu podstawowe zagadnienia związane z tworzeniem projektu i używaniem aktywności, układów oraz intencji jawnych i niejawnych. Pokazano, jak korzystać z fragmentów, tworzyć menu i jak pracować na plikach multimedialnych. Przede wszystkim zaś przedstawiono wszystkie ważne szczegóły projektowania i rozwijania aplikacji mobilnej.
W książce poruszono wiele zagadnień, między innymi:
- środowisko pracy i zasady projektowania aplikacji,
- obsługa wbudowanego aparatu fotograficznego i dotykowości,
- architektura MVVM i mechanizmy wiązania danych,
- testowanie aplikacji,
- animacje w Androidzie,
- usługa lokalizacji i korzystanie z map.
Autorzy są ekspertami i instruktorami z firmy Big Nerd Ranch, która specjalizuje się w rozwijaniu innowacyjnych aplikacji mobilnych.
Android — zaprogramuj przyszłość!
Bill Phillips jest współtwórcą i instruktorem serii szkoleń Big Nerd Ranch Android Bootcamp. Jest również wykładowcą, prowadzi bloga, lubi dobrą literaturę, komponuje muzykę i pisze książki.
Chris Stewart jest kierownikiem zespołu do spraw Androida. Zawsze dąży do perfekcji w tym, co robi. W wolnym czasie chodzi po górach i podróżuje.
Kristin Marsicano jest deweloperem aplikacji dla systemu Android. Jest pasjonatem nauki i rozwoju oprogramowania. W wolnych chwilach gotuje, zajmuje się jogą lub po prostu uczy się czegoś nowego.
Spis treści
Poznawanie systemu Android (19)
- Wymagania wstępne (20)
- Co nowego w trzecim wydaniu? (20)
- Jak korzystać z tej książki? (20)
- Jak zorganizowana jest ta książka (21)
- Wyzwania (22)
- Czy jesteś dociekliwy? (22)
- Styl kodowania (22)
- Konwencje typograficzne (23)
- Wersje systemu Android (23)
Niezbędne narzędzia (25)
- Pobieranie i instalowanie Android Studio (25)
- Pobieranie starszych wersji środowiska SDK (25)
- Urządzenie sprzętowe (26)
1. Twoja pierwsza aplikacja dla systemu Android (27)
- Podstawowe elementy aplikacji (28)
- Tworzenie projektu aplikacji dla systemu Android (29)
- Poruszanie się w Android Studio (33)
- Tworzenie układu interfejsu użytkownika (34)
- Hierarchia widoków (38)
- Atrybuty widgetów (39)
- Tworzenie zasobów tekstowych (40)
- Podgląd układu (41)
- Od pliku układu XML do obiektów klasy View (42)
- Zasoby i identyfikatory zasobów (43)
- Podłączanie widgetów (45)
- Pobieranie odwołań do widgetów (46)
- Tworzenie obiektów nasłuchujących (47)
- Tworzenie komunikatów toast (49)
- Zastosowanie mechanizmu dopełniania kodu (50)
- Uruchamianie aplikacji w emulatorze (51)
- Dla dociekliwych: proces budowania aplikacji (55)
- Narzędzia wspomagające budowanie aplikacji (56)
- Wyzwania (56)
- Wyzwanie: dostosowywanie komunikatów toast do własnych potrzeb (57)
2. System Android i wzorzec MVC (59)
- Tworzenie nowej klasy (60)
- Generowanie getterów i setterów (61)
- Wzorzec MVC a system Android (63)
- Zalety stosowania wzorca MVC (64)
- Aktualizacje warstwy widoku (65)
- Aktualizacja warstwy kontrolera (67)
- Uruchamianie aplikacji na urządzeniu fizycznym (71)
- Podłączanie urządzenia fizycznego (71)
- Konfigurowanie urządzenia do pracy ze środowiskiem deweloperskim (72)
- Dodawanie ikon (74)
- Dodawanie nowych zasobów do projektu aplikacji (75)
- Odwołania do zasobów w kodzie XML (77)
- Wyzwanie: dodaj listener do widoku TextView (78)
- Wyzwanie: dodaj przycisk Poprzednie (78)
- Wyzwanie: od przycisku Button do przycisku ImageButton (79)
3. Cykl życia aktywności (81)
- Logowanie cyklu życia aktywności (83)
- Tworzenie dziennika komunikatów (83)
- Zastosowanie panelu Logcat (85)
- Badanie cyklu życia aktywności w praktyce (87)
- Zmiana orientacji urządzenia a cykl życia aktywności (90)
- Konfiguracje urządzeń i zasoby alternatywne (90)
- Zapisywanie danych przy zmianie orientacji urządzenia (95)
- Nadpisywanie metody onSaveInstanceState(Bundle) (95)
- Jeszcze kilka słów o cyklu życia aktywności (97)
- Dla dociekliwych: bieżący proces czyszczenia aktywności (99)
- Dla dociekliwych: poziomy logowania i odpowiadające im metody (100)
- Wyzwanie: zapobieganie wielokrotnym odpowiedziom na to samo pytanie (101)
- Wyzwanie: ocena poziomu poprawności odpowiedzi (101)
4. Debugowanie aplikacji dla systemu Android (103)
- Wyjątki i ślad stosu (104)
- Diagnozowanie problemów (106)
- Logowanie śladów stosu (106)
- Ustawianie punktów przerwania w kodzie (108)
- Zastosowanie pułapek z wyjątkami (111)
- Mechanizmy debugowania specyficzne dla systemu Android (112)
- Korzystanie z programu Android Lint (112)
- Problemy z klasą R (114)
- Wyzwanie: zastosowanie narzędzia Layout Inspector (115)
- Wyzwanie: śledzenie alokacji zasobów pamięci (116)
5. Twoja druga aktywność (119)
- Konfigurowanie drugiej aktywności (120)
- Tworzenie nowej aktywności (121)
- Podklasa nowej aktywności (124)
- Deklarowanie aktywności w manifeście aplikacji (124)
- Dodawanie przycisku podpowiedzi do aktywności QuizActivity (125)
- Uruchamianie aktywności (127)
- Komunikowanie się z intencjami (128)
- Przekazywanie danych między intencjami (129)
- Używanie danych typu extras w intencjach (130)
- Pobieranie wyników z aktywności podrzędnej (134)
- Jak system Android widzi Twoje aktywności (138)
- Wyzwanie: zamykanie luk dla oszustów (141)
6. Wersje Android SDK i kompatybilność aplikacji (143)
- Wersje środowiska Android SDK (143)
- Kompatybilność aplikacji z różnymi wersjami systemu Android (144)
- Rozsądne minimum (145)
- Minimalna wersja SDK (147)
- Docelowa wersja SDK (147)
- Wersja kompilacji SDK (147)
- Bezpieczne dodawanie kodu z nowszych wersji API (148)
- Korzystanie z dokumentacji dla deweloperów aplikacji systemu Android (151)
- Wyzwanie: raportowanie wersji SDK (153)
- Wyzwanie: ograniczenie podpowiadania (154)
7. Fragmenty w interfejsie użytkownika i menedżer fragmentów (155)
- Potrzeba elastyczności interfejsu użytkownika (155)
- Wprowadzenie do zastosowania fragmentów (157)
- Uruchamianie aplikacji CriminalIntent (158)
- Tworzenie nowego projektu (160)
- Dwa typy fragmentów (162)
- Dodawanie zależności w Android Studio (162)
- Tworzenie klasy Crime (165)
- Hostowanie fragmentów interfejsu użytkownika (166)
- Cykl życia fragmentu (167)
- Dwa podejścia do hostowania fragmentów (168)
- Definiowanie widoku kontenera (168)
- Tworzenie fragmentu interfejsu użytkownika (170)
- Definiowanie układu fragmentu CrimeFragment (170)
- Tworzenie klasy CrimeFragment (172)
- Dodawanie fragmentów interfejsu użytkownika do instancji klasy FragmentManager (177)
- Transakcje fragmentów (179)
- FragmentManager i cykl życia fragmentów (180)
- Architektura aplikacji wykorzystującej fragmenty (182)
- Powód, dla którego wszystkie nasze aktywności używają fragmentów (182)
- Dla dociekliwych: fragmenty i biblioteka wsparcia (184)
- Dla dociekliwych: dlaczego fragmenty z biblioteki wsparcia są bardziej użyteczne? (185)
8. Wyświetlanie list w widoku RecyclerView (187)
- Aktualizacja warstwy modelu aplikacji CriminalIntent (188)
- Wzorzec Singleton i scentralizowane przechowywanie danych (189)
- Abstrakcyjna aktywność do przechowywania fragmentów (191)
- Ogólny układ przechowujący fragmenty (191)
- Abstrakcyjna klasa Activity (192)
- Klasy RecyclerView, Adapter oraz ViewHolder (197)
- Klasy ViewHolder i Adapter (198)
- Adaptery (199)
- Zastosowanie kontenera RecyclerView (201)
- Widok do wyświetlenia (202)
- Implementowanie klas ViewHolder i Adapter (203)
- Dowiązywanie elementów listy (206)
- Reagowanie na naciśnięcie (208)
- Dla dociekliwych: kontenery ListView i GridView (209)
- Dla dociekliwych: singletony (210)
- Wyzwanie: typy widoków kontenera RecyclerView (211)
9. Tworzenie interfejsów użytkownika z układami i widgetami (213)
- Korzystanie z graficznego narzędzia tworzenia układów (214)
- Wprowadzenie do dynamicznych układów interfejsu - ConstraintLayout (215)
- Korzystanie z układu ConstraintLayout (216)
- Edytor graficzny (217)
- Tworzenie miejsca dla widoków (218)
- Dodawanie widgetów (221)
- Wewnętrzne ustawienia układu ConstraintLayout (224)
- Edytowanie właściwości (225)
- Tworzenie dynamicznych elementów listy (228)
- Jeszcze kilka słów o atrybutach układu (229)
- Gęstość pikseli ekranu i jednostki dp oraz sp (229)
- Marginesy i odstępy (231)
- Style, motywy i atrybuty motywów (232)
- Wytyczne dla deweloperów aplikacji dla systemu Android (233)
- Graficzne narzędzia do tworzenia układów (233)
- Wyzwanie: formatowanie daty (233)
10. Zastosowanie argumentów fragmentów (235)
- Uruchamianie aktywności przez fragment (235)
- Dodawanie danych extras (237)
- Pobieranie danych extras (237)
- Wypełnianie widoku fragmentu CrimeFragment danymi z obiektu Crime (238)
- Wady bezpośredniego pobierania danych (239)
- Argumenty fragmentu (240)
- Przypisywanie argumentów do fragmentu (240)
- Pobieranie argumentów (241)
- Przeładowywanie listy (242)
- Pobieranie wyników działania fragmentów (244)
- Dla dociekliwych: dlaczego używamy argumentów fragmentów? (245)
- Wyzwanie: efektywne przeładowywanie zawartości kontenera RecyclerView (246)
- Wyzwanie: ulepszanie wydajności działania obiektu CrimeLab (246)
11. Zastosowanie klasy ViewPager (247)
- Tworzenie klasy CrimePagerActivity (248)
- Obiekty ViewPager i PagerAdapter (249)
- Integrowanie aktywności CrimePagerActivity (251)
- FragmentStatePagerAdapter kontra FragmentPagerAdapter (253)
- Dla dociekliwych: jak naprawdę działa ViewPager (255)
- Dla dociekliwych: rozmieszczanie widoków z poziomu kodu (256)
- Wyzwanie: odtwarzanie marginesów fragmentu CrimeFragment (257)
- Wyzwanie: dodawanie przycisków Pierwsza i Ostatnia (257)
12. Okna dialogowe (259)
- Tworzenie instancji klasy DialogFragment (261)
- Wyświetlanie fragmentu DialogFragment (263)
- Dodawanie zawartości okna dialogowego (265)
- Przekazywanie danych między fragmentami (267)
- Przekazywanie danych do fragmentu DatePickerFragment (268)
- Zwracanie danych do fragmentu CrimeFragment (270)
- Wyzwanie: więcej okien dialogowych (278)
- Wyzwanie: bardziej responsywny DialogFragment (278)
13. Pasek narzędzi (279)
- Biblioteka AppCompat (280)
- Używanie biblioteki AppCompat (280)
- Menu (282)
- Definiowanie menu w kodzie XML (282)
- Tworzenie menu (288)
- Reagowanie na wybranie elementu menu (291)
- Włączanie nawigacji hierarchicznej (292)
- Jak działa nawigacja hierarchiczna (293)
- Alternatywny przycisk akcji (294)
- Przełączanie tytułu przycisku akcji (295)
- "Jeszcze tylko jedna sprawa..." (297)
- Dla dociekliwych: pasek akcji a pasek narzędzi (299)
- Wyzwanie: usuwanie przestępstw z listy (300)
- Wyzwanie: zasoby tekstowe typu plural (300)
- Wyzwanie: pusty widok dla kontenera RecyclerView (300)
14. Bazy danych SQLite (301)
- Definiowanie schematu (302)
- Tworzenie szkieletu bazy danych (303)
- Eksploracja plików przy użyciu Android Device Monitor (306)
- Debugowanie problemów z bazą danych (307)
- Patroszymy CrimeLab (308)
- Zapisywanie danych w bazie (310)
- Zastosowanie klasy ContentValues (310)
- Wstawianie i aktualizowanie wierszy tabeli (311)
- Odczytywanie danych z bazy (313)
- Zastosowanie klasy CursorWrapper (314)
- Zamiana na obiekty modelu (316)
- Dla dociekliwych: więcej baz danych (319)
- Dla dociekliwych: kontekst aplikacji (320)
- Wyzwanie: usuwanie przestępstw z listy (320)
15. Intencje niejawne (321)
- Dodawanie przycisków (322)
- Dodawanie podejrzanego do warstwy modelu (323)
- Zastosowanie ciągów formatujących (325)
- Zastosowanie niejawnych intencji (326)
- Elementy składowe niejawnej intencji (327)
- Wysyłanie raportu o przestępstwie (328)
- Korzystanie z listy kontaktów (330)
- Wyszukiwanie aktywności zdolnych do wykonania danego zadania (334)
- Wyzwanie: klasa ShareCompat (337)
- Wyzwanie: kolejna intencja niejawna (337)
16. Wykonywanie zdjęć przy użyciu intencji (339)
- Miejsce do przechowywania zdjęć (339)
- Miejsce na przechowywanie plików (342)
- Zastosowanie klasy FileProvider (343)
- Określanie lokalizacji zdjęć (344)
- Zastosowanie intencji do uruchomienia aparatu fotograficznego (345)
- Uruchamianie intencji (346)
- Skalowanie i wyświetlanie bitmap (348)
- Deklarowanie wymagań aplikacji (351)
- Wyzwanie: wyświetlanie zdjęcia w pełnym rozmiarze (351)
- Wyzwanie: efektywne ładowanie miniaturek zdjęć (351)
17. Dwupanelowy interfejs typu lista-szczegóły (353)
- Dodawanie elastyczności do układu (354)
- Modyfikowanie klasy SingleFragmentActivity (355)
- Tworzenie układu z dwoma kontenerami dla fragmentów (356)
- Używanie aliasów zasobów (358)
- Tworzenie alternatywy dla tabletów (359)
- Aktywność: nadzorca fragmentów (360)
- Interfejsy zwrotne układów (361)
- Dla dociekliwych: jeszcze kilka słów o sprawdzaniu rozmiarów ekranu urządzenia (369)
- Wyzwanie: dodawanie funkcji "przeciągnij, aby usunąć" (370)
18. Lokalizacja (371)
- Lokalizacja zasobów (372)
- Zasoby domyślne (375)
- Sprawdzanie pokrycia zasobów przy użyciu edytora tłumaczeń Translations Editor (378)
- Dostosowywanie ustawień regionalnych (379)
- Kwalifikatory konfiguracji (382)
- Priorytetyzacja zasobów alternatywnych (383)
- Wiele kwalifikatorów (385)
- Odszukiwanie zasobów najlepiej dopasowanych do bieżącej konfiguracji (386)
- Testowanie zasobów alternatywnych (387)
- Wyzwanie: lokalizacja dat (388)
19. Ułatwienia dostępu (389)
- Usługa TalkBack (389)
- Eksploracja przez dotyk (392)
- Nawigacja liniowa poprzez przeciąganie palcem po ekranie (393)
- Jak spowodować, aby TalkBack odczytywał elementy nietekstowe? (395)
- Dodawanie opisów zawartości (395)
- Włączanie możliwości ustawienia fokusu dla wybranego widoku (397)
- Jak zapewnić zbliżoną funkcjonalność aplikacji z ułatwieniami dostępu (398)
- Zastosowanie etykiet do udostępniania kontekstu (400)
- Dla dociekliwych: korzystanie z aplikacji Accessibility Scanner (403)
- Wyzwanie: poprawianie listy (406)
- Wyzwanie: dostarczanie kontekstu dla elementu danych (406)
- Wyzwanie: powiadomienia o zdarzeniach (406)
20. Wiązanie danych i model MVVM (409)
- Różne architektury - dlaczego warto sobie tym zaprzątać głowę (409)
- Tworzenie aplikacji BeatBox (411)
- Proste wiązanie danych (412)
- Importowanie zasobów typu assets (416)
- Pobieranie zasobów assets (418)
- Podłączanie zasobów typu asset (420)
- Wiązanie do danych (423)
- Tworzenie modelu widoku (424)
- Wiązanie do modelu widoku (425)
- Observable data (428)
- Korzystanie z zasobów typu asset (430)
- Dla dociekliwych: jeszcze kilka słów o wiązaniu danych (431)
- Wyrażenia lambda (431)
- Jeszcze więcej cukru syntaktycznego (431)
- BindingAdapter (432)
- Dla dociekliwych: dlaczego zasoby typu asset, a nie zwykłe zasoby aplikacji? (432)
- Dla dociekliwych: zasoby typu non-asset? (433)
21. Testy jednostkowe i odtwarzanie plików audio (435)
- Tworzenie klasy SoundPool (435)
- Ładowanie plików dźwiękowych (436)
- Odtwarzanie plików dźwiękowych (438)
- Zależności testów (439)
- Tworzenie klasy testowej (440)
- Konfigurowanie testu (442)
- Zastosowanie zależności pozornych (443)
- Pisanie testów (444)
- Testowanie interakcji obiektów (445)
- Wywołania zwrotne wiązania danych (448)
- Usuwanie plików dźwięków z pamięci (449)
- Zmiana orientacji urządzenia a ciągłość istnienia obiektów (450)
- Zachowywanie fragmentów (451)
- Obracanie urządzenia a zachowywanie fragmentów (452)
- Dla dociekliwych: czy zachowywać fragmenty? (453)
- Dla dociekliwych: Espresso i testy integracyjne (455)
- Dla dociekliwych: obiekty pozorne i testowanie (456)
- Wyzwanie: sterowanie szybkością odtwarzania (457)
22. Style i motywy (459)
- Zasoby kolorów (460)
- Style (460)
- Dziedziczenie stylów (462)
- Motywy aplikacji (463)
- Modyfikowanie motywu (464)
- Dodawanie kolorów motywu (466)
- Nadpisywanie atrybutów motywu (467)
- Eksplorowanie motywu (468)
- Modyfikowanie atrybutów przycisków (471)
- Dla dociekliwych: jeszcze kilka słów o dziedziczeniu stylów (474)
- Dla dociekliwych: dostęp do atrybutów motywu (475)
23. Elementy XML drawable (477)
- Tworzenie przycisków o jednolitym wyglądzie (478)
- Elementy typu shape drawable (479)
- Lista stanów (481)
- Lista warstw (482)
- Dla bardziej dociekliwych: po co zawracać sobie głowę elementami XML drawable? (483)
- Dla bardziej dociekliwych: obrazy Mipmap (484)
- Dla dociekliwych: obrazy 9-patch (485)
- Wyzwanie: motywy przycisków (492)
24. Więcej o intencjach i zadaniach (493)
- Tworzenie aplikacji NerdLauncher (494)
- Rozwiązywanie intencji niejawnych (496)
- Tworzenie jawnych intencji w czasie działania programu (500)
- Zadania i stos aktywności (502)
- Przełączanie między zadaniami (503)
- Uruchamianie nowego zadania (504)
- Użycie launchera NerdLauncher jako ekranu głównego (507)
- Wyzwanie: ikony (507)
- Dla dociekliwych: procesy kontra zadania (508)
- Dla dociekliwych: dokumenty równoległe (511)
25. HTTP i zadania drugoplanowe (515)
- Tworzymy aplikację PhotoGallery (517)
- Podstawowe zagadnienia sieciowe (519)
- Uzyskiwanie uprawnień do korzystania z połączeń sieciowych (521)
- Uruchamianie zadań asynchronicznych AsyncTask w wątku tła (521)
- Ty i Twój wątek główny (523)
- Poza głównym wątkiem (524)
- Pobieranie danych w formacie JSON z serwisu Flickr (525)
- Parsowanie danych zapisanych w formacie JSON (529)
- Od zadania AsyncTask z powrotem do wątku głównego (532)
- Porządkowanie zadań asynchronicznych AsyncTask (535)
- Dla dociekliwych: jeszcze kilka słów o zadaniach AsyncTask (536)
- Dla dociekliwych: alternatywy dla zadań AsyncTask (537)
- Wyzwanie: Gson (538)
- Wyzwanie: podział na strony (538)
- Wyzwanie: dynamiczne modyfikowanie liczby wyświetlanych kolumn (539)
26. Obiekty Looper, Handler i HandlerThread (541)
- Przygotowanie kontenera RecyclerView do wyświetlania obrazów (541)
- Pobieranie wielu małych rzeczy (544)
- Komunikacja z wątkiem głównym (544)
- Tworzenie wątku tła (546)
- Komunikaty i handlery komunikatów (548)
- Anatomia komunikatu (548)
- Anatomia handlera (549)
- Używanie handlerów (549)
- Przekazywanie handlerów (554)
- Dla dociekliwych: zadania AsyncTask kontra wątki (559)
- Dla dociekliwych: rozwiązywanie problemu z pobieraniem zdjęć (560)
- Dla dociekliwych: tryb StrictMode (561)
- Wyzwanie: ładowanie wstępne i buforowanie danych (562)
27. Wyszukiwanie (563)
- Wyszukiwanie zdjęć w serwisie Flickr (564)
- Zastosowanie widoku SearchView (568)
- Reagowanie na interakcję widoku SearchView z użytkownikiem (571)
- Proste zachowywanie danych w plikach preferencji (573)
- Wygładzanie aplikacji (577)
- Wyzwanie: jeszcze bardziej ulepszamy aplikację (578)
28. Usługi działające w tle (579)
- Tworzenie usługi IntentService (579)
- Do czego służą usługi (582)
- Operacje sieciowe bezpiecznie działające w tle (582)
- Sprawdzanie, czy pojawiły się nowe wyniki wyszukiwania (584)
- Opóźnione wykonywanie z wykorzystaniem usługi AlarmManager (585)
- Jak używać alarmów we właściwy sposób (588)
- Obiekty PendingIntent (589)
- Zarządzanie alarmami przy użyciu PendingIntent (590)
- Sterowanie alarmami (590)
- Powiadomienia (593)
- Wyzwanie: powiadomienia na urządzeniach typu Android Wear (595)
- Dla dociekliwych: szczegóły usługi (596)
- Czym zajmują się usługi (a czego nie powinny robić) (596)
- Cykl życia usługi (596)
- Usługi typu non-sticky (597)
- Usługi typu sticky (597)
- Wiązanie usług (598)
- Dla dociekliwych: klasy JobScheduler oraz JobServices (599)
- JobScheduler i przyszłość zadań drugoplanowych (602)
- Wyzwanie: zastosowanie klasy JobService w systemie Lollipop (603)
- Dla bardziej dociekliwych: adaptery synchronizacji (603)
29. Intencje rozgłoszeń (605)
- Intencje a intencje rozgłoszeń (605)
- Odbieranie rozgłoszeń systemowych - aktywowanie podczas uruchamiania systemu (606)
- Tworzenie i rejestrowanie samodzielnego odbiornika rozgłoszeń (606)
- Używanie odbiorników rozgłoszeń (609)
- Filtrowanie powiadomień pierwszoplanowych (611)
- Wysyłanie intencji rozgłoszenia (611)
- Tworzenie i rejestrowanie odbiornika dynamicznego (612)
- Ograniczanie zasięgu rozgłoszeń tylko do naszej aplikacji przy użyciu prywatnych uprawnień (614)
- Przekazywanie i odbieranie danych przy użyciu rozgłoszeń uporządkowanych (617)
- Odbiorniki i zadania działające przez długi czas (622)
- Dla dociekliwych: zdarzenia lokalne (622)
- Używanie biblioteki EventBus (623)
- Używanie biblioteki RxJava (624)
- Dla dociekliwych: sprawdzanie, czy fragment jest widzialny (624)
30. Przeglądanie sieci WWW i widoki WebView (627)
- Ostatni kawałek danych z serwisu Flickr (628)
- Prosty sposób - intencje niejawne (630)
- Trudniejszy sposób - widok WebView (631)
- Zastosowanie interfejsu WebChromeClient do ulepszenia wyświetlania stron internetowych (635)
- Zmiana orientacji urządzenia a widok WebView (638)
- Niebezpieczeństwa związane z obsługą zmian konfiguracji (639)
- Dla dociekliwych: wstrzykiwanie obiektów JavaScript (639)
- Dla dociekliwych: aktualizacje widoku WebView (640)
- Wyzwanie: używanie przycisku Wstecz do obsługi historii przeglądania (641)
- Wyzwanie: obsługa łączy innych niż HTTP (641)
31. Widoki niestandardowe i zdarzenia związane z dotykiem (643)
- Konfigurowanie projektu aplikacji DragAndDraw (644)
- Tworzenie własnego, niestandardowego widoku (645)
- Tworzenie widoku BoxDrawingView (646)
- Obsługa zdarzeń związanych z dotykiem (648)
- Śledzenie zdarzeń związanych z ruchem palca po ekranie (649)
- Renderowanie z użyciem metody onDraw(Canvas) (652)
- Wyzwanie: zapisywanie stanu (653)
- Wyzwanie: obracanie prostokątów (654)
32. Animacja właściwości (657)
- Budowanie sceny (657)
- Proste animacje (659)
- Właściwości transformacji widoków (663)
- Używanie różnych interpolatorów (665)
- Modyfikowanie kolorów (665)
- Uruchamianie kilku animatorów jednocześnie (668)
- Dla dociekliwych: inne API animacji (669)
- Starsze narzędzia animacyjne (669)
- Transformacje (669)
- Wyzwania (670)
33. Lokalizacja i usługi Play...
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-3637-7 |
Rozmiar pliku: | 28 MB |