【笔记】 Activity在server端启动流程

1.预启动

 此阶段 6 步骤:

1.AMS.startActivity

  获取client端的UID,判断Client端是否有权限启动应用程序Activity。

2.ActivityStack.startActivityMayWait

查询系统中域Intent 匹配的Activity

    1 调用resolveActivity 通过PKMS 查询是否存在指定Intent的Activity

    2 根据caller判断启动Activity的客户端是应用程序还是其他查询(adb shell)

    3 调用ActivityStack.startActivityLocked 执行预启动阶段第三步

    4.处理wait 状态,正常启动状态不会wait

       adb下“am start -W ” 启动Activity 时,需要wait 状态

3.ActivityStack.startActivityLocked(IApplicationThread caller)

    1.创建Activity 的ActivityRecord 对象,代表此Activoty 在AMS 启动流程中单位;

4.ActivityStack.startActivityUncheckedLocked

    1.根据启动标记 和 启动模式,判断是否需要在新的Task 中运行目标Activity;

    2.判断是否有可服用的Task 或者Activity;

           需要在新的Task 总运行Activity的条件有如下3 种:

           (1)sourceRecord 为null,即 不是由Activity发出的启动请求(Launcher 或者adb start 启动的Activity)

           (2)sourceRecord 的启动模式为singleInstance

           (3)要启动的Activity 的启动模式为singleInstance 或singleTask

         满足以上三个条件,启动flags'中添加 FLAG_

    3.将复用/新建的TaskRecord 与ActivityRecord 关联;

    4.在AMS 中更新Task数量;

    5.调用ActivityStack.startActivityLocked

5.ActivityStack.st

猜你喜欢

转载自blog.csdn.net/pirionFordring/article/details/84189133