1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
frameworks/base/services/java/com/android/server/SystemServer.java
SystemServer
├── PowerManagerService ← 电源控制
├── ActivityManagerService ← 应用调度/生命周期
├── WindowManagerGlobalLock ← 窗口操作锁
├── WebViewUpdateService ← WebView 更新
├── DisplayManagerService ← 显示控制
├── PackageManagerService ← APK 安装/权限等
├── PackageManager ← 上层封装给 App 使用
├── ContentResolver ← 跨进程数据访问
├── EntropyMixer ← 安全熵增强
├── DataLoaderManagerService ← 动态模块加载
[ SystemServer ]
|
▼
┌────────────────────────────┐
│ SystemServiceManager │
└────────────────────────────┘
|
┌────────────┬──────────────┴───────────────┬───────────────┐
▼ ▼ ▼ ▼
[PowerManager] [DisplayManager] [PackageManagerService] [EntropyMixer]
| | | |
▼ ▼ ▼ ▼
[AMS] ───────────→ [WindowManager Lock] [WebViewUpdate] [DataLoader]
| |
└────→ ContentResolver / PackageManager └→ 动态选择 WebView Provider
ActivityManagerService(AMS)在 Android 系统中具有 绝对的进程/组件控制权限,可以杀掉包括普通 App、服务进程、后台 Provider、甚至部分系统服务在内的大量进程。它是系统层「调度与回收的裁判」。
AMS 可以通过多种策略和 API 杀掉: • App 的主进程 • 后台运行的 Service • 空进程 / 冗余进程 • 超时无响应进程(ANR) • 被 force-stop 的包对应的所有进程 • 用户主动或策略性 stop 的所有组件
- killPackageProcessesLocked()
1
2
// 根据包名杀掉所有相关进程
killPackageProcessesLocked("com.example.app", ...);
• 会杀掉该包名关联的: • Activity • Service • BroadcastReceiver • ContentProvider • 也会回收空进程
- forceStopPackage()
1
2
// 系统级别强杀
forceStopPackage("com.example.app", userId);
• 杀掉所有与包相关的进程 • 清除任务栈 • 移除 pending intent • 停止一切 Service / Receiver • 会触发 stop 状态,禁止其后台启动,直到用户手动打开
- forceStopPackage()
1
2
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("com.example.app");