首先认识几个重要的概念:

ActivityManagerService: 四大组件管理的核心类,同时管理和调度用户进程
ActivityRecord: 在AMS中用来保存一个activity的信息
TaskRecord: 在AMS用来保存一个任务的信息
ActivityStack: 管理taskRecord。三星FW包含HOME_STACK_TYPE、NORMAL_APP_STACK_TYPE等,其中home stack一般包含systemUi和launcher所在的taskRecord
ActivityStackSupervisor: 管理activityStack。

启动一个activity在AMS中的流程图:

① 匹配intent获取ActivityInfo
② 创建ActivityRecord
③ 确定activity所在task
   此处主要是通过判断Intent的标志(如start flag)和Activity的属性(如launchMode、taskAffinity、allowTaskReparenting、clearTaskOnLaunch、alwaysRetainTaskState、finishOnTaskLaunch)来确定Activity的Task(是否需要新建Task)和ActivityStack,并对task进行一些操作
④ 将ActivityRecord加入到task顶部
⑤暂停当前activity
⑥启动目标进程
⑦创建消息对列
   调用Looper.prepareMainLooper()创建消息队列,所谓的消息队列,其实就是创建一个Looper对象,Looper对象里面包含MessageQueue这样一个消息队列,main thread就一直循环处理消息队列上的消息,这个消息队列原理和实现很复杂,这里只需要知道它类似一个队列,边往队列里面发送消息,一边处理消息
⑧发送BIND_APPLICATION和LAUNCH_ACTIVITY消息
⑨处理BIND_APPLICATION消息
   处理BIND_APPLICATION消息,调用ActivityThread的handleBindApplication,创建application实例,最终会调用到application.onCreate()只有进程首次创建的时候会调用
⑩处理LAUNCH_ACTIVITY消息
   处理LAUNCH_ACTIVITY消息,调用handleLaunchActivity,handleLaunchActivity主要分为两个部分,performLaunchActivity和handleResumeActivity。
   performLaunchActivity。期间会创建activity,最终会分别调用activity的attach、onCreate和onStart。
   handleResumeActivity,最终调用activity的onResum

待继续整理。。。。。

转载于:https://www.cnblogs.com/kma-3/p/9879651.html

android启动activity的详细过程相关推荐

  1. android使用其他应用打开方式,Android 启动activity的4种方式及打开其他应用的activity的坑...

    Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence. standard是最常见的activity启动方式,也是默认的启动的方式. ...

  2. Android实战——Activity超详细学习笔记

    一.Activity简介 Activity是四大组件中最重要的一个,也是平时开发中接触最多的.与Activity启动行为相关的就是它的启动模式,Standard.SingleTop.SingleTas ...

  3. 启动Spring项目详细过程

    1.Spring 项目放到web项目容器中(Tomcat.Jetty.JBoss) 本文以通用的Tomcat为例 2.项目容器启动时需要加载读取web.xml配置文件 如下图: 3.容器首先会去读取w ...

  4. Android启动Activity的两种方式与四种启动模式

    1.在一个Activity中调用startActivity()方法 2.在一个Activity中调用startActivityRequest()方法. 重写onActivityResult方法,用来接 ...

  5. 安装 Android Studio 2.3 详细过程及错误解决

    因为要开发Android5.0的缘故,抛弃了eclipse转到了Android Studio,第一次使用就是遇到了许多问题,终于是解决问题了,特意写一篇博文给各位要准备从eclipse转到Androi ...

  6. uni-app发布android版App的详细过程

    目录 开发环境 SDK目录说明 准备工程 发布版本 开发环境 1. Android Studio下载地址:Android Studio官网 OR Android Studio中文社区 2. HBuil ...

  7. oracle数据库从关闭到启动,Oracle数据库的启动和关闭详细过程

    一.数据库打开 startup数据库正常启动 1.startup nomount 启动 Oracle DB 实例:NOMOUNT ,创建sga,创建了alert日志,用于create db,creat ...

  8. android activity焦点,android启动activity文本框不获得焦点

    在开发中,常常会碰到这种情况,打开一个activity后,第一个文本框自动获得焦点,同时会弹出软键盘输入框,这样很影响用户体验,现在来看解决方法. 我们先来看看为什么会出现上述情况,原因很简单,文本框 ...

  9. android listview 滑动黑屏,Android 跨进程启动Activity黑屏(白屏)的三种解决方案

    当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activi ...

最新文章

  1. 通过微信企业号发送zabbix报警
  2. 修复efi引导的win7
  3. myeclipse 8.5 常用快捷键
  4. 一套扁平化界面风格的flex 皮肤
  5. bert简介_BERT简介
  6. caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置
  7. python 实现语音转文字_python3实现语音转文字(语音识别)和文字转语音(语音合成)...
  8. vue页面锚文本_Vue如何实现锚点定位功能?
  9. php 后端调试,一般如何调试php程序
  10. 在VSCode中编辑HTML文档时,在Dom标签上写style属性时智能提示的问题
  11. Struts2接受页面传值过程中出现input的问题
  12. shell+中sum的用法_使用shell进行计算
  13. 2017计算机办公自动化试题,2017年计算机考试办公自动化试题及答案
  14. Ubuntu18.04 一条命令安装VLC视频播放器 可倍速播放
  15. python实现SG滤波
  16. 基于C# winform实现随机点名小工具(支持csv导入)
  17. 你的第一桶金是如何赚到的?
  18. 人工智能技术涉及到的学科有哪些,22年最新
  19. java格式化xml字符串_XML串的格式化输出
  20. jekins自动化部署

热门文章

  1. hibernate SQLQuery实践指南
  2. [20170302]什么是fuzzy.txt
  3. SCVMM 2012 R2---添加Hyper-V主机
  4. readonly 与 const 区别
  5. VS2010 Beta1 / .NET Framework 4 Beta 1 - 下载
  6. 2017 开源软件排行_2017年最佳开源教程
  7. 涉足荒野script_为什么社区经理必须涉足(而不是潜入)社区
  8. (14)css—伪类选择器
  9. 提升开发效率的 Chrome 开发者工具快捷键参考
  10. 视觉SLAM笔记(55) 位姿图