What Are Android Ongoing Notifications?
When you set setOngoing(true) (or use the foreground-service notification path), Android marks the notification as “something is happening right now.” The system keeps it pinned, prevents the user from swiping it away, and surfaces it across the lock screen, status bar, and chips like Pixel's “At a Glance” row.
Unlike a one-shot push from FCM/APNs, an ongoing notification is your app's in-place UI for an event that is actively in progress.
How They Work
You build the notification
NotificationCompat.Builder with a channel, content title, content text, optional progress, and setOngoing(true).
You start a foreground service
startForegroundService(...) and inside the service call startForeground(NOTIF_ID, notification, FOREGROUND_SERVICE_TYPE_*) so Android keeps the process alive.
You update the notification
Whenever the data changes, rebuild the notification (or mutate it via setProgress / setContentText) and re-post with the same ID. The system replaces in place.
Notification Styles That Matter for Live Use Cases
MediaStyle
Best for music, podcasts, video. Renders rich playback controls in the notification, lock screen, and the system media output picker.
CallStyle
For incoming/ongoing/screening calls. Surfaces full-screen UI on lock screen and a live chip in the status bar.
DecoratedCustomViewStyle
Custom RemoteViews for layouts the standard styles cannot express (e.g. an order-tracker timeline).
ProgressStyle (Android 16+)
New rich progress UI for delivery/ride/order tracking with steps, milestones, and segment colors.
BigTextStyle / BigPictureStyle
For richer expanded UI on a non-live ongoing notification (e.g. an upload status with a thumbnail).
InboxStyle
Multiple lines of progress text. Useful for sync or batch status.
Best Use Cases for Ongoing Notifications
Turn-by-turn navigation
Google Maps, Waze, Apple-Maps-on-Android lookalikes. Updates per turn / per second.
Audio playback
Spotify, YouTube Music, podcast apps. MediaStyle integrates with the lock screen, Quick Settings, and Bluetooth controls.
Ride / delivery tracking
Uber, DoorDash, parcel-tracking apps. Show driver name, ETA, status with ProgressStyle (16+).
Calls and meetings
WhatsApp, Zoom, Telephony app. CallStyle gives you a system-wide call experience.
Workouts and timers
Strava, Nike Run Club, fitness trackers. Update per second; the user can pause from the notification.
Long downloads / uploads
File sync, OTA updates, video exports. Use ProgressStyle and the foreground service type dataSync.
Pairing With a Foreground Service
Android requires that anything keeping the device busy with live updates run as a foreground service. Ongoing notifications are how that service announces itself to the user.
The notification + foreground service combination is essentially a single contract: “I'm doing X right now; here is the UI, here is the type of work, the user can stop me.” Read more in Android Foreground Services Explained.
Since Android 14 you must declare the FGS type (location, mediaPlayback, dataSync, phoneCall, camera, microphone, mediaProjection, health, remoteMessaging, systemExempted, shortService, specialUse) in your manifest. Android 15 enforces stricter rules around starting them from the background.
Ongoing Notifications vs iOS Live Activities
Android ongoing notification
Lives in the notification shade, lock screen, and status bar chip. Less visually rich than a Live Activity, but very flexible.
iOS Live Activity
Lives on the Lock Screen and Dynamic Island. Visually richer and more tightly integrated into the system UI.
Android ProgressStyle (16+) and Live Updates
Google’s push to make ongoing notifications closer in feel to Live Activities — see Android Live Updates.
Cross-platform pattern
Build the experience once in your app logic; render an ongoing notification on Android and a Live Activity on iOS from the same data model.
For richer Material-You-style live notifications, see Android Live Updates. For the visual surface, see Dynamic Island on iOS and Pixel's At a Glance on Android.