5 exercises on core Android/Kotlin terms — concurrency, UI, and build tooling.
0 / 5 completed
1 / 5
What is a Kotlin coroutine?
A coroutine is a lightweight, suspendable unit of work that enables asynchronous, non-blocking code written in a sequential style. A suspend function can pause at a suspension point and resume later, freeing the underlying thread to do other work instead of blocking it. Coroutines run inside a CoroutineScope with a Dispatcher (such as Dispatchers.IO or Dispatchers.Main) that decides which thread pool executes them. Because they are far cheaper than OS threads, you can launch thousands concurrently — ideal for network calls and database access on Android.
2 / 5
What is a Kotlin Flow?
A Flow is a cold, asynchronous stream built on coroutines that emits a sequence of values over time. "Cold" means the producer block does not run until a terminal operator like collect subscribes. Flows support reactive operators (map, filter, debounce) and respect structured concurrency and backpressure. Variants include StateFlow (a hot, state-holding flow with a current value, ideal for UI state) and SharedFlow (a hot, multicast event stream). Flows are the idiomatic replacement for LiveData and RxJava streams in modern Android.
3 / 5
What is Jetpack Compose?
Jetpack Compose is Android's modern declarative UI toolkit. You build interfaces from @Composable functions that describe the UI for the current state; when observable state changes, Compose recomposes only the affected parts of the tree. It replaces the older XML layout + View system, eliminating findViewById and manual view updates. State is held in remember and mutableStateOf, and side effects are managed with effect handlers like LaunchedEffect. Compose interoperates with the legacy View system during migration.
4 / 5
In Android builds, what is Gradle?
Gradle is the build automation system used by Android. It resolves dependencies, compiles Kotlin/Java, runs annotation processors, and assembles the final artifact through configurable tasks organized into a directed graph. The Android Gradle Plugin adds Android-specific concepts like build variants (combinations of build types such as debug/release and product flavors). Build logic lives in build.gradle or build.gradle.kts files. Gradle's incremental builds and build cache speed up repeated compilations by reusing unchanged outputs.
5 / 5
What are R8 and AAB in Android release builds?
R8 is the default code shrinker, optimizer, and obfuscator. It removes unused classes and methods (tree-shaking), inlines and optimizes bytecode, and renames symbols to shorten and obscure them — controlled by ProGuard-style keep rules. The AAB (Android App Bundle) is the publishing format you upload to Google Play instead of a monolithic APK. Play then uses dynamic delivery to generate optimized, device-specific APKs containing only the resources, languages, and native libraries each device needs, reducing download size.