android启动activity的详细过程
首先认识几个重要的概念:
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的详细过程相关推荐
- android使用其他应用打开方式,Android 启动activity的4种方式及打开其他应用的activity的坑...
Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence. standard是最常见的activity启动方式,也是默认的启动的方式. ...
- Android实战——Activity超详细学习笔记
一.Activity简介 Activity是四大组件中最重要的一个,也是平时开发中接触最多的.与Activity启动行为相关的就是它的启动模式,Standard.SingleTop.SingleTas ...
- 启动Spring项目详细过程
1.Spring 项目放到web项目容器中(Tomcat.Jetty.JBoss) 本文以通用的Tomcat为例 2.项目容器启动时需要加载读取web.xml配置文件 如下图: 3.容器首先会去读取w ...
- Android启动Activity的两种方式与四种启动模式
1.在一个Activity中调用startActivity()方法 2.在一个Activity中调用startActivityRequest()方法. 重写onActivityResult方法,用来接 ...
- 安装 Android Studio 2.3 详细过程及错误解决
因为要开发Android5.0的缘故,抛弃了eclipse转到了Android Studio,第一次使用就是遇到了许多问题,终于是解决问题了,特意写一篇博文给各位要准备从eclipse转到Androi ...
- uni-app发布android版App的详细过程
目录 开发环境 SDK目录说明 准备工程 发布版本 开发环境 1. Android Studio下载地址:Android Studio官网 OR Android Studio中文社区 2. HBuil ...
- oracle数据库从关闭到启动,Oracle数据库的启动和关闭详细过程
一.数据库打开 startup数据库正常启动 1.startup nomount 启动 Oracle DB 实例:NOMOUNT ,创建sga,创建了alert日志,用于create db,creat ...
- android activity焦点,android启动activity文本框不获得焦点
在开发中,常常会碰到这种情况,打开一个activity后,第一个文本框自动获得焦点,同时会弹出软键盘输入框,这样很影响用户体验,现在来看解决方法. 我们先来看看为什么会出现上述情况,原因很简单,文本框 ...
- android listview 滑动黑屏,Android 跨进程启动Activity黑屏(白屏)的三种解决方案
当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activi ...
最新文章
- 通过微信企业号发送zabbix报警
- 修复efi引导的win7
- myeclipse 8.5 常用快捷键
- 一套扁平化界面风格的flex 皮肤
- bert简介_BERT简介
- caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置
- python 实现语音转文字_python3实现语音转文字(语音识别)和文字转语音(语音合成)...
- vue页面锚文本_Vue如何实现锚点定位功能?
- php 后端调试,一般如何调试php程序
- 在VSCode中编辑HTML文档时,在Dom标签上写style属性时智能提示的问题
- Struts2接受页面传值过程中出现input的问题
- shell+中sum的用法_使用shell进行计算
- 2017计算机办公自动化试题,2017年计算机考试办公自动化试题及答案
- Ubuntu18.04 一条命令安装VLC视频播放器 可倍速播放
- python实现SG滤波
- 基于C# winform实现随机点名小工具(支持csv导入)
- 你的第一桶金是如何赚到的?
- 人工智能技术涉及到的学科有哪些,22年最新
- java格式化xml字符串_XML串的格式化输出
- jekins自动化部署