autumn

"framework framework"

Posted by Zsk on July 12, 2025
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 的所有组件

  1. killPackageProcessesLocked()
1
2
// 根据包名杀掉所有相关进程
killPackageProcessesLocked("com.example.app", ...);

• 会杀掉该包名关联的: • Activity • Service • BroadcastReceiver • ContentProvider • 也会回收空进程

  1. forceStopPackage()
1
2
// 系统级别强杀
forceStopPackage("com.example.app", userId);

• 杀掉所有与包相关的进程 • 清除任务栈 • 移除 pending intent • 停止一切 Service / Receiver • 会触发 stop 状态,禁止其后台启动,直到用户手动打开

  1. forceStopPackage()
1
2
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("com.example.app");