E-book details

Android. Aplikacje wielowątkowe. Techniki przetwarzania

Android. Aplikacje wielowątkowe. Techniki przetwarzania

Anders Göransson

Ebook

Wykorzystaj w pełni potencjał wątków!

Jeżeli chcesz tworzyć aplikacje dostarczające użytkownikom doskonałych wrażeń, jeżeli chcesz wykonywać skomplikowane zadania szybciej lub po prostu musisz jednocześnie wykonywać różne działania — naucz się korzystać z wątków. Tworzenie programów wielowątkowych jest trudne, ale opanowanie tej sztuki pozwoli Ci osiągnąć wymierne korzyści!

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.

Przewodnik po świecie wątków platformy Android!

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)

  • Title: Android. Aplikacje wielowątkowe. Techniki przetwarzania
  • Author: Anders Göransson
  • Original title: Efficient Android Threading: Asynchronous processing techniques for Android applications
  • Translation: Lech Lachowski
  • ISBN: 978-83-246-9615-4, 9788324696154
  • Date of issue: 2015-02-24
  • Format: Ebook
  • Item ID: andraw
  • Publisher: Helion