← Back to Blogs
Android Framework Services Overview
Inside System Server - the heart of Android
1 min readEvery time you open an app, receive a notification, adjust brightness, or unlock your phone - a framework service is involved. These services run inside System Server (the most critical process in Android) and expose their functionality to apps via Binder IPC.
System Server - The Host Process
Inside System Server
┌─────────────────────────────────────────────────────┐
│ System Server │
│ │
│ ActivityManagerService WindowManagerService │
│ PackageManagerService PowerManagerService │
│ InputManagerService NotificationManager │
│ LocationManagerService TelephonyManager │
│ AlarmManagerService JobSchedulerService │
│ ContentResolver AccountManagerService │
│ │
│ All registered with ServiceManager (Binder) │
└───────────────────────────┬─────────────────────────┘
│ Binder IPC
┌───────────────┴───────────────┐
▼ ▼
App Process A App Process B
(calls via proxy) (calls via proxy)Core Services and What They Do
- ▸ActivityManagerService (AMS) - manages the entire app lifecycle (create, start, resume, pause, stop, destroy Activities). Controls the back stack and task management. Handles ANR detection
- ▸WindowManagerService (WMS) - manages every window on screen. Handles window layering (z-order), transitions, insets, and display routing. Works closely with SurfaceFlinger
- ▸PackageManagerService (PMS) - parses APKs, manages installs/uninstalls, resolves Intents to Activities, enforces permissions
- ▸PowerManagerService - controls wake locks, doze mode, screen timeouts, and screen brightness. Apps acquire wake locks to prevent the device from sleeping
- ▸InputManagerService - receives raw input events from the kernel, performs gesture recognition, and dispatches touch/key events to the correct window
- ▸NotificationManagerService - manages the notification shade, ranking, and channels. Enforces Do Not Disturb rules
- ▸AlarmManagerService - schedules delayed or repeating work via AlarmManager API. Wakes up the device at exact times even from deep sleep
- ▸JobSchedulerService - batches background work to minimize battery impact. Enforces constraints (network, charging, idle)
How an App Accesses a Framework Service
App → Service Call Flow
App Code
val manager = getSystemService(Context.NOTIFICATION_SERVICE)
manager.notify(id, notification)
│
│ looks up 'notification' in ServiceManager
▼
NotificationManager (proxy in app process)
│
│ Binder IPC → /dev/binder
▼
NotificationManagerService (in System Server)
│
│ validates, ranks, displays
▼
StatusBar Service → shows notificationTip: Use 'adb shell dumpsys <service-name>' to inspect live state of any framework service. For example: 'adb shell dumpsys activity' shows the full task/activity stack; 'adb shell dumpsys power' shows wake lock holders.