Jeśli szukasz książki, która prowadzi krok po kroku przez świat tworzenia aplikacji na Androida, to „Skarby AGH. Zbiory historyczne Biblioteki Głównej” są świetnym pretekstem, by sięgnąć po publikację rozwijającą kompetencje programistyczne. Temat może brzmieć nietypowo, ale w praktyce chodzi o coś bardzo konkretnego: przejście z Javy do Kotlina oraz uporządkowanie pracy z współbieżnością w aplikacjach mobilnych. To właśnie tam pojawia się książka, która łączy podstawy języka z realnymi przykładami z Androida.
Dlaczego Kotlin stał się naturalnym wyborem dla Androida?
Tworzenie aplikacji na system Android bywa wymagające, zwłaszcza gdy trzeba opanować nowy język. Kotlin szybko zyskał pozycję oficjalnego języka rozwoju dla Androida, więc naturalnym kolejnym krokiem jest nauka jego praktycznego zastosowania w projektach. Ta książka jest zaprojektowana tak, aby ułatwić przejście z Javy do Kotlina — bez poczucia, że zaczynasz od zera.
Autorzy pokazują, jak Kotlin daje realną przewagę w zadaniach związanych z obliczeniami asynchronicznymi. W efekcie zyskujesz narzędzia, które pozwalają nie tylko „uruchamiać” kod, ale też kontrolować jego przebieg w środowisku, gdzie wiele rzeczy dzieje się naraz.
Ważny jest też nacisk na zadania typowe dla natywnego Androida: od podstawowych konstrukcji po rozwiązania, które realnie pojawiają się w aplikacjach tworzonych na co dzień.
Struktura nauki: od fundamentów języka po concurrency w praktyce
Książka prowadzi czytelnika przez kilka poziomów wtajemniczenia. Najpierw skupia się na tym, co konieczne w Kotlinie: system typów, bezpieczeństwo nulli, typ Unit, funkcje, generyki, własności, klasy, delegaty oraz modyfikatory widoczności. To fundament, który pozwala później swobodnie korzystać z bardziej zaawansowanych konstrukcji.
W dalszej części pojawia się Kotlin Collections Framework, czyli ramy kolekcji. Zobaczysz, jak wygląda podejście do kontenerów, mutowalności, operatorów przeciążonych oraz jak wygląda programowanie funkcyjne w praktyce. Autorzy porównują podejście proceduralne z funkcyjnym, a także omawiają transformacje typu map, filter, flatMap czy mapowanie grupujące.
Dla osób tworzących Androida równie istotne są rozdziały o architekturze i komponentach aplikacji: system Android, środowisko uruchomieniowe, aktywności, fragmenty, usługi, dostawcy treści, odbiorniki transmisji oraz podstawowe wzorce architektoniczne.
Współbieżność w Androidzie: thread safety i model pracy w tle
Gdy aplikacja rośnie, pojawia się problem: jak bezpiecznie uruchamiać pracę w tle i jak nie doprowadzić do błędów trudnych do odtworzenia. Ten fragment książki dotyka thread safety, w tym takich zagadnień jak atomicity, visibility i model wątków w Androidzie.
W praktyce książka omawia też narzędzia do zarządzania wątkami, takie jak Looper/Handler oraz Executors i ExecutorServices. Osobny wątek dotyczy zarządzania zadaniami przez mechanizmy systemowe: JobScheduler oraz WorkManager.
W dalszej kolejności pojawia się temat bezpieczeństwa w kodzie: mutexy, niebezpieczne sytuacje wynikające z dostępu współbieżnego, kolejki pracy, a także zjawisko back pressure. To materiał, który pomaga zrozumieć, dlaczego samo „uruchomienie wątku” nie jest rozwiązaniem problemów z wydajnością i niezawodnością.
Od klasycznych callbacków do structured concurrency i coroutines
Jednym z kluczowych celów książki jest pokazanie, jak przejść z modelu opartego na callbackach do podejścia, które lepiej porządkuje logikę asynchroniczną. W tym kontekście pojawia się przykład funkcjonalny (feature związany z zakupem), gdzie budowany jest komponent typu ViewModel i implementowana logika — tak, aby czytelnik widział, jak zmienia się sposób myślenia o przepływie danych.
Najważniejszy zwrot następuje przy wątku structured concurrency. Autorzy wyjaśniają, czym jest coroutine, pokazują działanie buildera async oraz omawiają relacje rodzic–dziecko w ramach structured concurrency. Do tego dochodzą elementy takie jak CoroutineScope, CoroutineContext i funkcje suspending.
Co istotne, książka nie ogranicza się do teorii: omawia różnice między podejściem tradycyjnym a coroutine, a także kwestie anulowania (cancellation). Wątek cancellation obejmuje m.in. to, jak działa Job, jak anulowanie jest kooperatywne oraz jak są obsługiwane przyczyny anulowania i wyjątki.
Channels i Flows: komunikacja i asynchroniczne przetwarzanie danych
Kolejna część dotyczy dwóch narzędzi do pracy z asynchronicznością: Channels oraz Flows. W rozdziale o kanałach znajdziesz omówienie różnych typów kanałów: rendezvous, unlimited, conflated, buffered. Autorzy opisują też ideę komunikacji producent–konsument oraz inspirację modelem Communicating Sequential Processes.
W przypadku Flow książka wprowadza czytelnika w przetwarzanie strumieni danych: przykłady cold flow, operatory, terminal operators oraz podejście do obsługi błędów. Pojawiają się również konkretne scenariusze użycia: interfejs z API opartym o callbacki, równoległe transformowanie strumienia wartości oraz tworzenie własnego operatora.
Ważnym wątkiem są też „gorące” przepływy: SharedFlow i StateFlow. Autorzy pokazują architekturę, implementację, replikację wartości, buforowanie oraz tworzenie modelu event bsu. Dzięki temu łatwiej zrozumieć, jak strumienie danych działają w aplikacjach, gdzie ważne są zarówno zdarzenia, jak i stan.
Wydajność i profilowanie: jak kontrolować zużycie zasobów
W każdej poważnej aplikacji kluczowe jest, aby nie tylko działała, ale też była wydajna. Książka poświęca osobne miejsce na Android Profiling Tools. Omawia m.in. Android Profiler, Network Profiler, CPU Profiler oraz Energy Profiler i Memory Profiler.
W praktyce możesz dowiedzieć się, jak analizować timeline aktywności CPU, jak korzystać z Connection View i Thread View, a także jak wykrywać wycieki pamięci (np. przez LeakCanary). To podejście pomaga podejmować decyzje o optymalizacjach na podstawie danych, a nie domysłów.
W dalszej części pojawiają się techniki optymalizacji: poprawa hierarchii widoków przez ConstraintLayout, redukcja kosztownych rysowań, minimalizacja payloadu w sieci, bitmap pooling i caching oraz ograniczanie niepotrzebnej pracy. Dodatkowo książka porusza temat minifikacji i obfuskacji z użyciem R8 oraz ProGuard.
| Parametr | Wartość |
|---|---|
| Nazwa | Skarby AGH. Zbiory historyczne Biblioteki Głównej |
| SKU | 353728962a54 |
| Cena | 11.87 zł |
| Zakres tematyczny | Przejście z Javy do Kotlina na Androidzie; concurrency, structured concurrency, coroutines, channels, flows; thread safety; profilowanie wydajności i optymalizacje |
Spis treści jako mapa tego, czego się nauczysz
Jeśli lubisz uczyć się według logicznej ścieżki, ta publikacja ma charakter „z planem”. Zaczyna od Kotlin Essentials: typów, null safety, funkcji, klas, własności i delegatów, potem przechodzi do Kotlin Collections Framework. Następnie omawia fundamenty Androida: stos, runtime, komponenty aplikacji oraz wzorce architektoniczne.
Dalej książka prowadzi przez wątki i bezpieczeństwo: thread safety, modelowanie problemów, kolejki pracy i back pressure. Potem pokazuje, jak radzić sobie z concurrency przy użyciu callbacków, a następnie przechodzi w kierunku coroutines: suspending functions, cancellation, supervisorScope oraz obsługę wyjątków.
Na końcu dostajesz praktyczne narzędzia do modelowania strumieni i komunikacji — channels i flows — oraz część poświęconą wydajności z narzędziami profilującymi. Na tej bazie łatwiej podejmować decyzje, kiedy optymalizować zasoby, a kiedy zmieniać architekturę pracy w aplikacji.
- Structured concurrency jako sposób na uporządkowanie pracy asynchronicznej w Androidzie.
- Coroutines, channels i flows jako zestaw narzędzi do komunikacji i przetwarzania danych w czasie rzeczywistym.
To połączenie wiedzy językowej, architektonicznej i praktyk wydajnościowych sprawia, że książka jest szczególnie przydatna wtedy, gdy chcesz tworzyć aplikacje stabilne, czytelne i wydajne. A jeśli lubisz łączyć inspiracje z obszarem nauki i dziedzictwa — Skarby AGH. Zbiory historyczne Biblioteki Głównej brzmią jak dobry znak, że rozwój technologiczny też może mieć swoją „kolekcję” wartościowych treści.