Programming Android with Kotlin (E-book) – dlaczego przejście z Javy ma sens
Tworzenie aplikacji na Androida bywa wyzwaniem, szczególnie gdy w grę wchodzi nauka nowego języka. Dlatego właśnie Programming Android with Kotlin (E-book) został pomyślany jako praktyczny przewodnik dla osób, które chcą przejść z Javy do Kotlin i zrozumieć, w jaki sposób Kotlin daje realną przewagę w kontrolowaniu obliczeń asynchronicznych. To książka, która uczy nie tylko składni, ale też sposobu myślenia o współbieżności w aplikacjach mobilnych.
Autorzy – Pierre-Olivier Laurence, Amanda Hinchman-Dominguez, G. Blake Meike oraz Mike Dunn – pokazują implementacje najczęstszych zadań w natywnym Androidzie. Duży nacisk kładą na structured concurrency, czyli uporządkowane programowanie współbieżne, które pomaga pisać kod czytelny, przewidywalny i odporny na typowe problemy.
Jeśli chcesz zbudować aplikacje w Kotlin, zrozumieć podstawy języka, a następnie przejść do kolekcji, architektury Androida i technik współbieżności, ta pozycja prowadzi krok po kroku przez cały proces.
Kotlin essentials: fundamenty, które przyspieszają rozwój
Na początku książka wprowadza w Kotlin essentials, czyli elementy języka, które musisz znać, aby pisać stabilny kod. Czytasz o systemie typów, w tym o typach prymitywnych oraz o bezpieczeństwie nulli, które w Kotlin znacząco ogranicza ryzyko błędów. To podejście sprawia, że kod jest bardziej przewidywalny już na etapie kompilacji.
W kolejnych rozdziałach omawiane są typy funkcyjne, generyki, zmienne i funkcje, a także lambdy. Pojawiają się też kluczowe mechanizmy, takie jak funkcje rozszerzeń, klasy, inicjalizacja, właściwości lateinit i lazy, delegaty oraz obiekty towarzyszące (companion objects).
Ważnym elementem są także konstrukcje modelujące dane: data classes, enum classes oraz sealed classes, wraz z modyfikatorami widoczności. W praktyce oznacza to, że szybciej uporządkujesz logikę aplikacji i lepiej dopasujesz strukturę kodu do wymagań Androida.
Kolekcje i Android fundamentals: od danych do komponentów aplikacji
Gdy masz już podstawy języka, książka przechodzi do Kotlin Collections Framework i pokazuje, jak pracować z kontenerami danych. Omawiane są podstawy kolekcji, mutowalność, interoperacyjność z Javą oraz przeładowane operatory. Dzięki temu łatwiej przeniesiesz rozwiązania z Javy do Kotlin i unikniesz typowych pułapek.
Ważny wątek to programowanie funkcyjne: transformacje, filtrowanie, mapowanie, flatMap, grupowanie oraz różnice między iteratorami a sekwencjami. Książka prowadzi przez przykłady, w których widać problem i jego implementację, a następnie wyjaśnia, jak podejście funkcyjne pomaga w czytelnym modelowaniu danych.
Później przechodzisz do Android fundamentals. Uczysz się, jak działa stos systemu (hardware, kernel, system services, Android Runtime), jak wygląda środowisko aplikacji oraz jakie komponenty składają się na aplikację mobilną. Omawiane są intenty i filtry intencji, konteksty (w tym context aplikacji), a także budowanie aplikacji w oparciu o aktywności, fragmenty, back stack, usługi, dostawców treści i broadcast receivers.
Współbieżność w Androidzie: bezpieczeństwo wątków i uporządkowany model pracy
Jednym z największych tematów książki jest Concurrency in Android. Zaczyna się od podstaw bezpieczeństwa wątków: atomicity, visibility i thread safety. Dowiesz się, jak działa model wątków w Androidzie i co oznacza ryzyko opóźnień, zakleszczeń oraz wycieków pamięci. Książka opisuje też narzędzia do zarządzania wątkami, w tym Looper/Handler oraz Executors i ExecutorServices.
W dalszej części pojawia się wątek pracy na poziomie „jobów” oraz narzędzi, które pomagają planować i wykonywać zadania w tle: JobScheduler oraz WorkManager. To ważne, bo w aplikacjach mobilnych liczy się nie tylko poprawność, ale i przewidywalność działania w różnych warunkach systemowych.
Osobny rozdział dotyczy Thread Safety w praktyce: inicjowanie problemu z wątkiem, niezmienniki (invariants), mutexy, thread-safe collections, thread confinement, contention oraz kolejki pracy. Książka porównuje też wywołania blokujące i nieblokujące oraz omawia back pressure.
Callbacks, coroutines i structured concurrency: od problemów do eleganckich rozwiązań
W rozdziale o obsłudze współbieżności przy użyciu callbacków książka pokazuje typowy przykład funkcji zakupowej i przeprowadza przez tworzenie logiki w podejściu, które prowadzi do wniosków o ograniczeniach modelu opartego na wątkach. Jest tam też dyskusja o pamięciozżernych pułapkach, takich jak memory leaks oraz o tym, dlaczego tradycyjne podejście do threading może mieć ograniczenia.
Następnie książka przechodzi do Coroutines Concepts. Dowiadujesz się, czym jest coroutine, poznajesz pierwszą coroutine, a także builder async. Pojawia się uporządkowana współbieżność i relacja parent–child, a także rola CoroutineScope i CoroutineContext. Omawiane są funkcje zawieszające (suspending functions) oraz to, co dzieje się pod spodem w kontekście modyfikatora suspend.
Kolejny rozdział rozwija temat: structured concurrency z coroutines, różnice między zawieszającymi funkcjami a tradycyjnym podejściem z ExecutorService, a także kwestie anulowania (cancellation). Książka opisuje, jak działa lifecycle coroutine, jak działa Job (holding state), jak anulować coroutine oraz jak anulowanie jest delegowane do bibliotek trzecich. Jest też wątek cooperative cancellation, w tym przykład z delay oraz przyczyny anulowania. Dużo miejsca zajmuje także obsługa wyjątków: unhandled vs exposed exceptions oraz superwizja (supervisorScope).
Channels i Flows: komunikacja oraz asynchroniczne przetwarzanie danych
Jeśli chcesz zrozumieć komunikację między coroutine, książka prowadzi przez Channels. Omawia kanały rendezvous, iterowanie po kanale, inne warianty kanałów: unlimited, conflated i buffered. Poznasz model komunikacji i architekturę opartą o Communicating Sequential Processes, a także pierwszy praktyczny przykład implementacji.
Ważnym elementem jest wyrażenie select oraz tematy typu fan-out i fan-in, performance test i back pressure. Książka porównuje również kanały do modelu aktorów oraz tłumaczy, dlaczego wykonanie jest sekwencyjne „wewnątrz procesu”. Wspomina też o ograniczeniach kanałów, w tym o ryzyku deadlock w CSP oraz o tym, że kanały są „hot”.
Ostatni blok tematyczny przed przejściem do optymalizacji dotyczy Flows. Uczysz się wprowadzenia do flow, poznajesz bardziej realistyczny przykład, a następnie poznajesz operatory i terminal operators. Książka pokazuje użycie cold flow oraz dwa przykłady: interfejs z API callbackowym i równoległe przekształcanie strumienia wartości. Pojawia się też kwestia obsługi błędów i rozdzielenie odpowiedzialności (separation of concern), a także naruszenia przejrzystości wyjątków (exception transparency).
W dalszej części omawiane są hot flows z SharedFlow i StateFlow. Dowiesz się, jak działa architektura, jak rejestrować subskrybenta, jak wysyłać wartości do SharedFlow, jak streamować dane, a także jak korzystać z replay, buforowania i tego, czy wartości są wysyłane w sposób zawieszający. Dostajesz również przykład użycia StateFlow.
Wydajność w praktyce: Android Profiling Tools i optymalizacje zasobów
Ostatnie rozdziały koncentrują się na wydajności. Książka przechodzi przez Android Profiling Tools: Android Profiler oraz konkretne widoki. Omawia Network Profiler (Connection View i Thread View), a także analizę wywołań sieciowych: overview, response, request i callstack. Jest też CPU Profiler z timeline oraz analizą aktywności wątków, a w dodatku opis narzędzi do śledzenia metod (method tracing).
W zakresie zasobów pojawia się Energy Profiler i Memory Profiler, a także wykrywanie wycieków pamięci z wykorzystaniem LeakCanary. Dzięki temu uczysz się, jak diagnozować problemy, zanim użytkownicy zaczną je odczuwać w codziennym korzystaniu z aplikacji.
Kolejny rozdział pokazuje, jak trim down resource consumption poprzez optymalizacje: osiąganie płaskiej hierarchii widoków dzięki ConstraintLayout, redukcję programowych rysunków przez drawables, minimalizację payloadu assetów w wywołaniach sieciowych oraz techniki typu Bitmap Pooling i caching. Książka omawia też redukowanie niepotrzebnej pracy, używanie statycznych funkcji oraz minifikację i obfuskację z R8 i ProGuard.
| Parametr | Wartość |
|---|---|
| Nazwa | Programming Android with Kotlin (E-book) |
| SKU | 7b14a78c7374 |
| Cena | 220.15 zł |
Programming Android with Kotlin (E-book) jako konkretna inwestycja w umiejętności
Ta książka to nie tylko teoria. Jej rozdziały prowadzą od Kotlin essentials, przez kolekcje i fundamenty Androida, aż do zaawansowanej współbieżności: thread safety, callbacks, coroutines, structured concurrency, kanały oraz flow. To zestaw tematów, który realnie przekłada się na jakość kodu w aplikacjach.
W praktyce oznacza to, że nauczysz się pisać sekwencyjne, asynchroniczne zadania przy niskim koszcie, lepiej kontrolować anulowanie, rozumieć back pressure i komunikację między coroutine. Dodatkowo dowiesz się, jak mierzyć wydajność i ograniczać zużycie zasobów dzięki narzędziom profilującym.
Jeśli szukasz e-booka, który pomoże Ci uporządkować przejście z Javy do Kotlin i wejść na poziom projektowania asynchronicznego w Androidzie, Programming Android with Kotlin (E-book) jest zaprojektowany dokładnie pod ten cel.