美文网首页
AMS(ActivityManagerService)学习笔记

AMS(ActivityManagerService)学习笔记

作者: Kraos | 来源:发表于2020-08-31 16:59 被阅读0次

    AMS(ActivityManagerService)源码分析

    • 两个核心:ActivityStack,ActivityTask

    • startActivity的intent匹配情况:

      • 匹配到的目标对象所在程序包已经有其他元素在运行,通知该进程加载指定Activity
      • 目标对象所属程序未运行,AMS先启动它的一个实例,然后运行其目标Activity
    • startActivity流程:

      • Activity1(Context)->startActivity@ContextImpl->execStartActivity@Instrumentation->startActivity@AMS
    • AMS的startActivity流程:

      • ActivityManagerService:

        • startActivity :其实就是调用startActivityAsUser
        • startActivityAsUser:将userId传入,做调用者的隔离检查和权力检查,通过后调用startActivityMayWait@ActivityStack
      • ActivityStack:

        • startActivityMayWait :

          1. 是否显式
          2. 不是显式则需要调用resolveActivity()查找
          3. 是否重量级进程(重量级的进程一般是指在整个系统唯一存在一个进程,不会正常走保存恢复机制,而是一直运行在后台,不会被后台杀死,因此需要用户显示退出进入该进程。)
          4. 调用startActivityLocked@ActivityStack
          5. 函数结果写入outResult

          函数中的wait就是体现在outResult这个地方

        • startActivityLocked

          1. 确保caller也就是调用者本身的进程是存在的,否则返回START_PERMISSION_DENIED错误
          2. 处理标志FLAG_ACTIVITY_FORWARD_RESULT(跨越式传递),A3的result会传给最初的A1
          3. resultCode判断->排除A2的startActivityResult
          4. Intent未找到或ActivityInfo为空,报错返回
          5. 权限检查,未通过返回SecurityExcepiton
          6. 生成ActivityRecord记录判断结果,调用startActivityUncheckedLocked@ActivityStack

          Android源码中许多带有Locked标志的函数都是提醒使用者要保证函数的线程安全,它们涉及不可重入资源的处理。

        • startActivityUncheckedLocked

          1. 取出Intent中的启动标志flag
          2. FLAG_ACTIVITY_NO_USER_ACTION处理,检测是否主观意愿启动,调用者是否指示resume
          3. START_FLAG_ONLY_IF_NEEDED检查,启动对象和调用对象为同一个,则不重复操作
          4. 是否启动新Task,启动新Task情况下无法返回结果值
          5. 不启动新Task的情况下,调用findTaskLocked找到符合的Task,也就是栈顶Activity所在Task
          6. 是否需要清理整个Task(FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR同时存在),是否为FLAG_ACTIVITY_CLEAR_TOP,清理目标Activity以上的元素等等 对应四种启动模式
          7. 调用startActivityLocked(2),里面有newTask的判断。
    • startActivity流程图:


      AMS中的startActivity流程.png

    相关文章

      网友评论

          本文标题:AMS(ActivityManagerService)学习笔记

          本文链接:https://www.haomeiwen.com/subject/iufpsktx.html