AMS(activityManagerService)作用

从以下角度梳理

  1. AMS启动流程
  2. AMS启动一个activity
  3. AMS与service和broadcast的交互流程
  4. AMS在应用crash流程的作用

应用通过ActivityManager获取AMS的代理管理权(ActivityMangerProxy)。避免用户调用AMS的核心系统服务。

 

1.AMS启动流程

AMS通过systemServer启动

//frameworks/base/services/java/com/android/server/SystemServer.java
SystemServer::startBootstrapServices()

        // Activity manager runs the show.
        traceBeginAndSlog("StartActivityManager");
        mActivityManagerService = mSystemServiceManager.startService(
                ActivityManagerService.Lifecycle.class).getService();
        mActivityManagerService.setSystemServiceManager(mSystemServiceManager);

 

2.AMS启动一个activity

点击桌面一个图标启动应用为例(微信wechat)

涉及三个进程launcher、zygote、system_server、wechat

  • launcher包含的ActivityMangerProxy调用system_server进程的AMS的startActivity启动activity(binder
  • AMS通过zygote进程fork一个新的进程作为weChat的进程(socket)
  • weChat的进程的ActivityMangerProxy通知system_server的AMS当前程序初始化完成(binder
  • system_server的ApplicationProxy调用weChat的applicationThread的scheduletelaunchActivity的方法通知启动activity(binder
  • applicationThread通过hander、message的方法发送LAUNCH_ACTIVITY启动进程后续开始回调activity的生命周期方法(hander)

3.AMS与service和broadcast的交互流程

启动service和启动activity类似,不再描述

广播:app进程向ams注册广播, 广播发送者,通过ams发送广播,ams查询注册信息,转发广播,回调app进程的broadReceiver的onReceive方法

 

4.AMS在应用crash流程的作用

应用进程抛出异常,进入handleApplicationCrash,在该函数中调用AMS的crashApplication方法,弹出crash对话框,用户点击后,进入app进程的process.killprocess方法,之后AMS做清理动作

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值