当前位置: 首页 > news >正文

AMS 启动流程管理进程与Binder的关联

1. AMS在Activity启动流程中扮演什么角色?

核心作用:AMS是Activity启动的总调度中心,负责协调各环节,确保Activity正确启动并显示。
具体流程

  1. 接收启动请求

    • 应用调用startActivity()后,通过Binder IPC 通知AMS。

  2. 校验合法性

    • AMS通过PMS检查目标Activity是否在AndroidManifest.xml中注册。

    • 检查调用者权限(如startActivity权限或目标Activity的exported属性)。

  3. 进程管理

    • 如果目标应用未运行,AMS通过Zygote fork新进程,并触发Application和主线程初始化。

  4. 调度生命周期

    • AMS通知目标进程的ActivityThread执行onCreate()onStart()等生命周期回调。

  5. 窗口管理

    • WindowManagerService(WMS)协作,将Activity的UI布局添加到屏幕。

一句话总结:AMS是Activity启动的“大脑”,负责权限校验、进程创建、生命周期调度和跨进程协调。

2. AMS如何管理进程优先级(adj)?

核心机制:AMS通过OOM_ADJ(Out Of Memory Adjustment)值标记进程重要性,Linux内核根据该值决定回收顺序。
优先级分类(数值越小,优先级越高):

ADJ级别值范围典型场景
FOREGROUND_APP0-1当前用户交互的Activity所在进程
VISIBLE_APP2可见但无焦点的Activity(如弹窗)
PERCEPTIBLE_APP3-4用户可感知的进程(如后台音乐)
CACHED_APP5-15后台缓存进程(可随时回收)

管理策略

  • 动态调整:根据组件状态(如Activity是否可见、Service是否绑定)实时更新adj值。

  • Low Memory Killer(LMK):当系统内存不足时,内核优先杀死高adj值的进程(如先杀CACHED_APP,保留FOREGROUND_APP)。

面试加分点

示意图

复制

[App进程] --(Binder IPC)--> [AMS in system_server] --(Binder IPC)--> [Zygote/WMS/PMS]

面试加分点


总结回答模板

  • 提到lmkd(Low Memory Killer Daemon)是Android专有的进程回收机制,与AMS紧密配合

  • 3. 简述AMS和Binder的关系(AMS是Binder服务端)

    核心关系:AMS通过Binder机制实现跨进程通信(IPC),是Android架构中系统服务的典型代表。
    具体表现

  • Binder服务端

    • AMS本身运行在system_server进程,作为Binder服务端,提供IActivityManager接口供其他进程调用。

    • 例如:startActivity()最终通过Binder调用到AMS的startActivityAsUser()方法。

  • Binder客户端

    • 应用进程通过ActivityManager类获取AMS的Binder代理(IActivityManager.Stub.Proxy)。

  • 跨进程协作

    • AMS通过Binder与ActivityThread(应用主线程)通信,调度生命周期(如scheduleLaunchActivity())。

  • 强调AMS的Binder接口设计遵循AIDL规范,是Android系统级IPC的核心案例。

  • Activity启动角色
    “AMS是启动流程的中枢,负责权限校验、进程创建、生命周期调度,并协调WMS/PMS完成显示。”

  • 进程优先级管理
    “AMS通过adj值标记进程重要性(如0为前台进程,15为缓存进程),内核根据adj值决定回收顺序。”

  • Binder关系
    “AMS作为Binder服务端运行在system_server,提供IActivityManager接口,供应用进程跨进程调用。”

相关文章:

  • LeetCode.234. 回文链表
  • 峰飞航空与合肥开启全面合作,打造先进空中立体多维交通运输生态
  • 国家出手肥胖问题,AI减肥起风了
  • Element Plus 图标使用方式整理
  • 【力扣hot100题】(076)买卖股票的最佳时机
  • 基于华为云kubernetes的应用多活的示例
  • 基于PyQt5的企业级生日提醒系统设计与实现
  • AI智能体需求研究报告:小红书、知乎、抖音等平台用户需求深度分析
  • 【QT】QT中的文件IO
  • 【SpringBoot】98、SpringBoot中整合springdoc-openapi-ui接口文档
  • 网络出故障时,四大表(MAC表、ARP表、路由表、转发表)怎么查?看看这套排查顺序
  • 操作系统常用命令
  • 点击抽奖功能总结
  • 更改CMD背景图片
  • [特殊字符] 手机连接车机热点并使用 `iperf3` 测试网络性能
  • 让你的MCP符合openai协议
  • 时间序列频率转换
  • 【Python】读取xlsb或xlsx的单一或连续单元格工具类
  • 从0到1构建工具站 - day6 (在线编程工具-docker)
  • C++初阶-C++入门基础
  • 做网站用html还是php/女排联赛排名
  • 千岛湖建设集团网站/郑州疫情最新消息
  • 在线课程网站开发任务书/优化新十条
  • 公司独立网站平台建设/宁波seo行者seo09
  • 云南专业网站制作公司/推广竞价账户托管
  • 佛山网站排名推广/seoapp推广