三大服务的基本内容
1. 整体关系图
graph TD
A[SystemServer] --> B[AMS活动管理]
A --> C[WMS窗口管理]
A --> D[PMS包管理]
B --> B1[Activity管理]
B --> B2[进程管理]
B --> B3[服务管理]
C --> C1[窗口显示]
C --> C2[输入事件]
C --> C3[动画管理]
D --> D1[应用安装]
D --> D2[权限管理]
D --> D3[包信息]
2. ActivityManagerService (AMS)
2.1 主要职责
class ActivityManagerService {
/**
* 1. Activity管理
* - 启动Activity
* - 管理Activity栈
* - 处理Activity生命周期
*/
fun startActivity() {
// 检查权限
checkPermission()
// 查找目标Activity
resolveActivity()
// 创建或复用进程
startProcess()
// 调度Activity启动
scheduleLaunch()
}
/**
* 2. 进程管理
* - 创建进程
* - 进程优先级
* - 进程回收
*/
fun processManagement() {
// 进程创建
createProcess()
// 设置优先级
setPriority()
// 内存管理
manageMemory()
}
}
2.2 使用示例
class AMSExample {
fun startActivityExample() {
// 启动Activity
startActivity(Intent(this, NextActivity::class.java))
// 后台实际调用AMS
// 1. 权限检查
// 2. 进程创建(如需)
// 3. Activity生命周期管理
}
fun processExample() {
// 获取运行中的进程信息
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val runningProcesses = activityManager.runningAppProcesses
}
}
3. WindowManagerService (WMS)
3.1 主要职责
class WindowManagerService {
/**
* 1. 窗口管理
* - 窗口添加/删除
* - 窗口层级管理
* - 窗口动画
*/
fun windowManagement() {
// 添加窗口
addWindow()
// 更新窗口
updateWindow()
// 移除窗口
removeWindow()
}
/**
* 2. 输入事件分发
* - 触摸事件
* - 按键事件
*/
fun inputDispatch() {
// 接收输入事件
handleInput()
// 分发到目标窗口
dispatchToWindow()
}
}
3.2 使用示例
class WMSExample : Activity() {
fun windowExample() {
// 获取WindowManager
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
// 添加悬浮窗
val params = WindowManager.LayoutParams().apply {
type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
}
val view = LayoutInflater.from(this).inflate(R.layout.float_window, null)
windowManager.addView(view, params)
}
}
4. PackageManagerService (PMS)
4.1 主要职责
class PackageManagerService {
/**
* 1. 应用管理
* - 安装应用
* - 卸载应用
* - 更新应用
*/
fun packageManagement() {
// 安装应用
installPackage()
// 解析清单文件
parseManifest()
// 权限授予
grantPermissions()
}
/**
* 2. 权限管理
* - 权限检查
* - 权限授予
*/
fun permissionManagement() {
// 检查权限
checkPermission()
// 请求权限
requestPermission()
}
}
4.2 使用示例
class PMSExample {
fun packageExample() {
// 获取PackageManager
val packageManager = context.packageManager
// 获取应用信息
val packageInfo = packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_ACTIVITIES
)
// 安装APK
val intent = Intent(Intent.ACTION_VIEW).apply {
setDataAndType(apkUri, "application/vnd.android.package-archive")
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
startActivity(intent)
}
fun permissionExample() {
// 检查权限
if (checkSelfPermission(Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
// 使用相机
} else {
// 请求权限
requestPermissions(arrayOf(Manifest.permission.CAMERA), REQUEST_CAMERA)
}
}
}
5. 三者协作示例
class SystemServiceCooperation {
fun launchCameraExample() {
// 1. PMS检查权限
if (checkCameraPermission()) {
// 2. AMS启动相机Activity
startCameraActivity()
// 3. WMS处理窗口显示
handleWindowDisplay()
}
}
private fun checkCameraPermission(): Boolean {
// PMS权限检查
return context.checkSelfPermission(Manifest.permission.CAMERA) ==
PackageManager.PERMISSION_GRANTED
}
private fun startCameraActivity() {
// AMS处理Activity启动
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivity(intent)
}
private fun handleWindowDisplay() {
// WMS处理窗口显示
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}
6. 工作流程图
sequenceDiagram
participant App as 应用程序
participant AMS as ActivityManagerService
participant WMS as WindowManagerService
participant PMS as PackageManagerService
App->>PMS: 1. 检查权限
PMS-->>App: 返回权限状态
App->>AMS: 2. 启动Activity
AMS->>PMS: 3. 验证组件信息
PMS-->>AMS: 返回验证结果
AMS->>WMS: 4. 创建窗口
WMS->>WMS: 5. 管理窗口层级
WMS-->>App: 6. 显示界面
7. 注意事项
- AMS注意点
// 1. 避免ANR
// 2. 合理管理进程优先级
// 3. 注意Activity栈管理
- WMS注意点
// 1. 窗口层级管理
// 2. 性能优化
// 3. 输入事件处理
- PMS注意点
// 1. 权限管理
// 2. 安装包大小
// 3. 签名验证
通过以上讲解,我们可以看到:
- AMS主要负责四大组件的管理和进程管理
- WMS主要负责窗口显示和输入事件处理
- PMS主要负责应用安装和权限管理
这三个服务相互配合,共同保证了Android系统的正常运行。
9.实际应用示例 🌟
/**
* 实际应用场景
*/
class PracticalUsage {
/**
* 1. Activity管理
*/
fun activityManagement() {
// 启动Activity
startActivity(Intent().apply {
setClass(this@MainActivity, SecondActivity::class.java)
flags = Intent.FLAG_ACTIVITY_NEW_TASK
})
// 任务管理
moveTaskToFront()
// 结束Activity
finishActivity()
}
/**
* 2. 窗口处理
*/
fun windowHandling() {
// 添加悬浮窗
windowManager.addView(floatingView, params)
// 更新窗口
windowManager.updateViewLayout(view, params)
// 设置全屏
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
}
/**
* 3. 权限处理
*/
fun permissionHandling() {
// 检查权限
if (checkSelfPermission(permission) == PERMISSION_GRANTED) {
// 执行操作
}
// 请求权限
requestPermissions(permissions, REQUEST_CODE)
// 安装APK
installPackage(apkUri)
}
}
10.性能优化 ⚡
总结一下:
-
AMS(前台接待):
- 管理Activity生命周期
- 处理任务栈
- 进程管理
-
WMS(展示管理):
- 窗口布局
- 输入事件分发
- 显示内容管理
-
PMS(安保系统):
- 应用安装卸载
- 权限管理
- 包信息管理
使用建议:
- 理解系统机制
- 合理使用API
- 注意性能优化
- 做好异常处理