cena netto: 51.45 Twoja cena 48,88 zł + 5% vat - dodaj do koszyka
Android
Aplikacje wielowątkowe
Techniki przetwarzania
Ta książka w całości poświęcona jest korzystaniu z wątków na platformie
Android.
Dzięki niej poznasz przeróżne sposoby asynchronicznego przetwarzania oraz ich zalety
i wady. Jednak na samym początku zapoznasz się z podstawowymi informacjami dotyczącymi
wielowątkowości w języku Java. Dowiesz się, w jaki sposób wątki komunikują się ze
sobą i synchronizują dostęp do zasobów oraz jak nimi zarządzać. Kolejne rozdziały
zawierają sporą dawkę wiedzy na temat różnych technik asynchronicznych. Zapoznanie
się z ich treścią ułatwi Ci wybór techniki, która spełni Twoje wymagania, gdy sam
zabierzesz się za tworzenie aplikacji wielowątkowej. Książka ta jest obowiązkową
lekturą dla programistów chcących w pełni wykorzystać możliwości platformy Android.
Podstawy wielowątkowości w Javie i systemie Android.
Komunikacja wątków w obrębie procesu i pomiędzy procesami.
Zastosowanie strategii redukowania ryzyka powstawania wycieków pamięci.
Zarządzanie cyklem życia wątku podstawowego.
Sekwencyjne uruchamianie zadań w wątku tła za pomocą klasy HandlerThread.
Używanie frameworku wykonawcy Javy do kontrolowania i anulowania wątków.
Obsługa wykonywania zadań w tle za pomocą klas AsyncTask oraz IntentService.
Uzyskiwanie dostępu do dostawców treści za pomocą klasy AsyncQueryHandler.
Używanie ładowarek do aktualizowania interfejsu użytkownika nowymi danymi.
Przedmowa (11)
1. Komponenty systemu Android oraz potrzeba przetwarzania wieloprocesorowego
(15)
Stos programowy systemu Android (15)
Architektura aplikacji (16)
Aplikacja (17)
Komponenty (17)
Wykonywanie aplikacji (19)
Procesy systemu Linux (19)
Cykl życia (20)
Strukturyzacja aplikacji w celu zwiększenia wydajności (23)
Tworzenie aplikacji responsywnych za pomocą wątków (23)
Podsumowanie (25)
CZĘŚĆ I. PODSTAWY (27)
2. Wielowątkowość w Javie (29)
Podstawy wątków (29)
Wykonywanie (29)
Aplikacja jednowątkowa (30)
Aplikacja wielowątkowa (31)
Bezpieczeństwo wątków (33)
Blokada wewnętrzna i monitor Javy (34)
Synchronizowanie dostępu do zasobów współdzielonych (35)
Przykład: konsument i producent (37)
Strategie wykonywania zadań (38)
Model wykonywania współbieżnego (39)
Podsumowanie (40)
3. Wątki w systemie Android (41)
Wątki aplikacji w systemie Android (41)
Wątki interfejsu użytkownika (41)
Wątki wiązania (42)
Wątki w tle (42)
Proces i wątki systemu Linux (43)
Szeregowanie (45)
Podsumowanie (48)
4. Komunikacja wątków (49)
Potoki (49)
Podstawowe zastosowanie potoków (50)
Przykład: przetwarzanie tekstu w wątku roboczym (51)
Pamięć współdzielona (53)
Sygnalizacja (54)
Interfejs BlockingQueue (55)
Przesyłanie komunikatów w systemie Android (56)
Przykład: podstawowe przesyłanie komunikatów (57)
Klasy stosowane w przesyłaniu komunikatów (59)
Komunikaty (63)
Looper (66)
Handler (67)
Usuwanie komunikatów z kolejki (75)
Obserwowanie kolejki komunikatów (76)
Komunikacja z wątkiem interfejsu użytkownika (79)
Podsumowanie (80)
5. Komunikacja między procesami (81)
RPC systemu Android (81)
Binder (82)
Język AIDL (83)
Synchroniczne wywołanie RPC (84)
Asynchroniczne wywołanie RPC (86)
Przekazywanie komunikatów za pomocą obiektu Binder (88)
Komunikacja jednokierunkowa (89)
Komunikacja dwukierunkowa (91)
Podsumowanie (92)
6. Zarządzanie pamięcią (93)
Odzyskiwanie pamięci (93)
Wycieki pamięci związane z wątkiem (95)
Wykonywanie wątku (96)
Komunikacja wątków (101)
Unikanie wycieków pamięci (103)
Korzystanie ze statycznych klas wewnętrznych (104)
Korzystanie ze słabych referencji (104)
Zatrzymywanie wykonywania wątku roboczego (105)
Zachowanie wątków roboczych (105)
Czyszczenie kolejki komunikatów (105)
Podsumowanie (106)
CZĘŚĆ II. TECHNIKI ASYNCHRONICZNE (107)
7. Zarządzanie cyklem życia wątku podstawowego (109)
Podstawy (109)
Cykl życia (109)
Przerwania (110)
Wyjątki nieprzechwycone (112)
Zarządzanie wątkami (113)
Definiowanie i uruchamianie (113)
Retencja (115)
Podsumowanie (120)
8. Klasa HandlerThread: wysokopoziomowy mechanizm kolejkowania (121)
Podstawy (121)
Cykl życia (123)
Przypadki użycia (124)
Powtarzające się wykonywanie zadania (124)
Zadania powiązane (125)
Łańcuchowanie zadań (127)
Warunkowe wstawianie zadania (129)
Podsumowanie (130)
9. Kontrola wykonywania wątku za pomocą frameworku wykonawcy (131)
Interfejs Executor (131)
Pule wątków (133)
Predefiniowane pule wątków (134)
Niestandardowe pule wątków (135)
Projektowanie puli wątków (136)
Cykl życia (139)
Zamykanie puli wątków (140)
Przypadki użycia i pułapki pul wątków (141)
Zarządzanie zadaniami (143)
Reprezentacja zadania (143)
Zatwierdzanie zadań (144)
Odrzucanie zadań (147)
Klasa ExecutorCompletionService (148)
Podsumowanie (150)
10. Wiązanie zadania w tle z wątkiem interfejsu użytkownika za pomocą klasy
AsyncTask (151)
Podstawy (151)
Tworzenie i uruchamianie (154)
Anulowanie (154)
Stany (155)
Implementacja klasy AsyncTask (156)
Przykład: pobieranie obrazów (157)
Wykonywanie zadania w tle (160)
Wykonywanie globalne dla aplikacji (161)
Wykonywanie zadań w różnych wersjach platformy (162)
Wykonywanie niestandardowe (164)
Alternatywy dla klasy AsyncTask (165)
Trywialne implementacje klasy AsyncTask (165)
Zadania w tle wymagające instancji Looper (166)
Usługa lokalna (166)
Korzystanie z metody execute(Runnable) (167)
Podsumowanie (167)
11. Usługi (169)
Dlaczego warto wykorzystać komponent Service do wykonywania asynchronicznego? (169)
Usługi lokalne, zdalne i globalne (171)
Tworzenie i wykonywanie (172)
Cykl życia (173)
Usługa uruchamiana (174)
Implementacja metody onStartCommand (175)
Opcje ponownego uruchamiania (176)
Usługa kontrolowana przez użytkownika (178)
Usługa kontrolowana przez zadanie (181)
Usługa wiązana (183)
Wiązanie lokalne (184)
Wybór techniki asynchronicznej (187)
Podsumowanie (188)
12. Klasa IntentService (189)
Podstawy (189)
Dobre sposoby wykorzystania klasy IntentService (190)
Zadania uporządkowane sekwencyjnie (191)
Wykonywanie asynchroniczne w komponencie BroadcastReceiver (193)
Porównanie klas IntentService oraz Service (196)
Podsumowanie (196)
13. Uzyskiwanie dostępu do klasy ContentProvider za pomocą klasy AsyncQueryHandler
(197)
Krótkie wprowadzenie do klasy ContentProvider (197)
Uzasadnienie dla przetwarzania w tle klasy ContentProvider (199)
Korzystanie z klasy AsyncQueryHandler (200)
Przykład: rozszerzanie listy kontaktów (201)
Klasa AsyncQueryHandler (204)
Ograniczenia (205)
Podsumowanie (205)
14. Automatyczne wykonywanie w tle za pomocą ładowarek (207)
Framework ładowarek (208)
Klasa LoaderManager (209)
Interfejsy LoaderCallbacks (211)
Klasa AsyncTaskLoader (213)
Bezproblemowe ładowanie danych za pomocą ładowarki CursorLoader (213)
Korzystanie z ładowarki CursorLoader (214)
Przykład: lista kontaktów (214)
Dodawanie obsługi operacji CRUD (215)
Implementowanie niestandardowych ładowarek (219)
Cykl życia ładowarki (219)
Ładowanie w tle (220)
Zarządzanie treścią (222)
Dostarczanie zbuforowanych rezultatów (223)
Przykład: niestandardowa ładowarka plików (223)
Obsługa wielu ładowarek (226)
Podsumowanie (227)
15. Podsumowanie: wybór techniki asynchronicznej (229)
Zachowanie prostoty (230)
Zarządzanie zasobami i wątkami (230)
Wymiana komunikatów w celu uzyskania responsywności (231)
Unikanie nieoczekiwanego zakończenia zadania (231)
Łatwy dostęp do klasy ContentProvider (232)
A. Bibliografia (235)
Skorowidz (237)
248 stron, Format: 16.5x23.5cm, oprawa miękka
Po otrzymaniu zamówienia poinformujemy, czy wybrany tytuł polskojęzyczny lub
anglojęzyczny jest aktualnie na półce księgarni.