App Developer Foundations
You already write apps. This is the why behind the APIs: why components exist, what the lifecycle really does, where the main thread goes, and how to structure an app that survives.
- The four components
An Android app has no main(). It has four kinds of entry point that the system can start on its own — and that fact explains most of the platform's design.
11 minbeginnerapp-components - The Activity lifecycle
Seven callbacks, two ways to die, and one Bundle. The Activity lifecycle is a contract about what the system may do to your screen while you are not looking.
11 minintermediateapp-components - Activities, tasks and the back stack
A task is a stack of activities the user thinks of as one thing. Launch modes and flags are the rules for putting activities into tasks — and every one of them is a trade-off about Back.
11 minintermediateapp-components - Intents and filters
An Intent is either a named component or a question about capabilities. The difference between those two forms is the difference between a phone call and a noticeboard.
11 minbeginnerapp-components - The main thread
Every app process has one thread that does everything the user can see. Blocking it is not slow code — it is an unresponsive app, by definition.
11 minbeginnerthreading - Looper, Handler, MessageQueue
Three classes that have not changed in fifteen years: a thread-local loop, a priority queue ordered by due time, and the native epoll wait that lets an idle app consume nothing.
11 minnerdthreading - Coroutines on Android
A coroutine is not a thread. It is a state machine the compiler generates, dispatched onto a thread. That distinction explains cancellation, structured concurrency, and why suspension is cheap.
11 minintermediatethreading - The View system
A View is a rectangle that measures itself, lays out its children and records drawing commands. The whole UI of Android before Compose is that one idea, applied recursively.
11 minbeginnerui - How Compose works
Compose is a compiler plugin, a positional memory table and a snapshot system. Once you can see those three, recomposition stops being magic and becomes predictable.
11 minnerdui - UI state and events
A screen has exactly one state object and two directions of data. Getting that shape right removes most of the bugs that look like lifecycle problems.
11 minintermediateapp-architecture - Data and domain layers
A repository is a policy, not a wrapper. It decides which source of truth wins, when to cache, and what a failure means — and that decision is why the data layer exists at all.
11 minintermediateapp-architecture - Platform or library?
Two phones on the same Android version can run your app differently, because half the API you call is compiled into your APK and half is provided by the device.
11 minintermediatejetpack - Choosing the right API
Coroutine, WorkManager, foreground service, AlarmManager, JobScheduler: five answers to five different questions. The first question is not which API is best — it is how long the work must survive.
11 minintermediatebackground-work - The install flow
Installing is a transaction with a signature check, a data directory, a dexopt pass and a broadcast. It is also one of the platform's most security-sensitive paths — and the rules for who may install what keep tightening.
10 minintermediatepackages - The builder track
Eight app projects and seven nerd guides, each tied to a concept page. What you build, what you learn, and how to get set up so the rest of the track works.
9 minbeginnerbuilder