Zygote
API 16 · JELLY_BEAN

Android 4.1 Jelly Bean

Project Butter: vsync-driven, smooth UI

released
2012-07-09
runtime
Dalvik
design
Holo
status
stable

The story

Android 4.0 looked modern but still felt slow. Scrolling stuttered, and the iPhone felt smoother.

The problem

Rendering 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 remember

The 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_SERVICEsignature
  • READ_CALL_LOGdangerous
  • READ_EXTERNAL_STORAGEdangerous
  • WRITE_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.