The story
Android 4.0 looked modern but still felt slow. Scrolling stuttered, and the iPhone felt smoother.
The problemRendering had no relationship to the display's refresh rate. Frames were produced whenever work happened to finish, so they arrived unevenly.
Project Butter synchronised everything to vsync, added triple buffering and introduced the Choreographer. Android 4.1 was the first Android that felt smooth.
The one thing to rememberThe single biggest user-visible change in Android's history.
What shipped
- Project Butter: vsync-driven, smooth UI
- Expandable notifications
- Google Now
- Triple-buffered rendering
Platform internals
What changed underneath the APIs. These are the changes this site's architecture modules explain in depth.
- Project Butter: vsync, triple buffering, Choreographer
- RenderThread architecture begins
What developers had to deal with
- Choreographer
- Expandable notifications
- Resizeable app widgets
Behaviour changes
The full archive has every recorded change with its migration advice.
targetingui
Edge-to-edge is enforced
Apps targeting Android 16 cannot opt out of edge-to-edge drawing; the system ignores layout restrictions that would prevent it.
What to doHandle window insets explicitly and draw behind the system bars, testing with gesture navigation and a display cutout.
targetingui
Orientation and resizability restrictions are ignored on large screens
Apps targeting Android 16 ignore screenOrientation, resizeableActivity and aspect-ratio restrictions when the window is larger than 600dp.
What to doSupport adaptive layouts. Use window size classes and make every screen resizable.
targetingnotifications
Adaptive notification triggers become mandatory
Apps that use notification triggers must adopt the new adaptive trigger behaviour when targeting Android 16.
What to doMigrate to the supported trigger APIs and test notifications on the new behaviour.
targetingmedia
Predictive back is enabled by default
The predictive back system animation and callback are on by default for apps targeting Android 16; the manifest opt-out is ignored.
What to doHandle onBackPressed and the predictive back callbacks correctly and test gesture navigation.
all appsruntime
Intent redirection is restricted
Android 16 tightens which components can be launched through redirected intents, reducing a class of privilege escalation.
What to doReview any code that passes intents from another app to startActivity, and make components non-exported unless required.
all appssecurity
Safer dynamic code loading
Android 16 extends protections against loading writable dynamic code, closing paths that malware used to load payloads.
What to doStop loading code from writable storage; load DEX only from read-only files.
all appspermissions
JobScheduler quota changes
Android 16 changes how job execution time is counted and limited for apps.
What to doVerify long-running jobs still complete and handle stop reasons correctly.
targetingui
Expandable notifications
Notifications can expand to show more content.
What to doUse BigTextStyle or BigPictureStyle for longer content.
targetingstorage
Photo picker APIs
Android 16 adds picker APIs and media selection behaviour for reading images and video without broad storage permission.
What to doAdopt the photo picker and the media selection APIs instead of READ_MEDIA_* where possible.
all appsui
Live Updates notifications
Android 16 introduces Live Updates, a notification style for progress-based, user-visible ongoing work such as ride tracking and delivery.
What to doUse the promoted notification style for ongoing user-visible progress instead of custom notification layouts.
Permissions introduced here
BIND_ACCESSIBILITY_SERVICEsignatureREAD_CALL_LOGdangerousREAD_EXTERNAL_STORAGEdangerousWRITE_CALL_LOGdangerous
Where this sits
Release 16 of 37 API levels, by date
- Headline features
- 4
- Architecture changes
- 2
- Developer changes
- 3
- Sources cited
- 3
Kernel
This release shipped on Linux kernel versions 3.0.31. Kernel versions vary by device.