Activity启动过程笔记
为准备面试,将最近所复习的内容以博客的形式保存起来,方便以后的查询
本文参考老罗的文章http://blog.csdn.net/luoshengyang/article/details/6703247整理,由于老罗的这篇文章源码比较老,本文同时也参照结合主席的书。
好了,开始学习吧,我们从调用Activity的startActivity说起。
调用Activity的startActivity实际是内部是调用了startActivityForResult.而在startActivityForResult内部是调用了Instrumentation的execStartActivity。execStartActivity内部调用AmS的startActivity(Binder机制)。AmS执行startActivity期间先做一些与栈相关的工作(获取要启动Activity相关信息ActivityRecord,栈的创建、检查权限等等)。
AmS的startActivity调用过程如下:
----ActivityStackSupervisor.startActivityMayWait(直接调用,没有其他代码):从Intent里解析需要启动的Activity的相关信息。如:包名、类名。相关信息存在ResolveInfo类中,通过该类里面得到ActivityInfo对象。
----ActivityStackSupervisor.startActivityLocked:通过传入的caller形参(IApplicationThread类型,从Activity的startActivity函数就开始一个个函数调用传入)得到调用者进程相关信息,保存到callerApp(ProcessRecord类型)变量中,然后创建要启动的Activity相关信息。保存到r(ActivityRecord)变量中。
----ActivityStackSupervisor.startActivityUncheckedLocked:获取Activity的启动模式、判断要启动的Activity是否在栈顶、得到Activity加载的栈。
----ActivityStack.resumeTopActivitiesLocked:确保被调用的Activity所在的栈处于顶端。
----ActivityStack.resumeTopActivityInnerLocked:判断要启动的Activity所在的栈是否对当前用户不可见,如果不可见就不需要继续执行下去,因为即使把这个Activity启动起来,用户也看不见,还不如先把它保存起来,等到下次可见的时候再启动。若可见,则继续执行。把要启动的Activity添加到栈顶。
----ActivityStackSupervisor.startSpecificActivityLocked:主要跟要启动的Activity进程相关。如判断所再进程是否已经运行、判断是否另开进程。如果没有指定新进程,即直接用默认进程,则直接调用realStartActivityLocked。
----ActivityStackSupervisor.realStartActivityLocked:通过Binder驱动进入到ApplicationThread的scheduleLaunchActivity函数。
做完这些工作,AmS通过Binder调ApplicationThread(是个Binder对象)的scheduleLaunchActivity . ApplicationThread通过消息机制控制Activity生命周期。
Activity启动过程笔记相关推荐
- Activity启动过程剖析
Activity启动过程剖析 你同样可以在Github上看到这篇文章:https://github.com/onlynight/ActivityStartPrinciple 写在前面 在看这篇文章之前 ...
- activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)
1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- activity启动流程_以AMS视角看Activity启动过程
原文作者:Levi_wayne 原文地址:blog.csdn.net/u012551754/article/details/78822782 特别声明:本文转载自网络,版权归作者所有,如有侵权请联系删 ...
- Android系统(117)---Activity启动过程
Activity启动过程 ###一些基本的概念 ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 ActivityThread,App的 ...
- Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)
前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...
- Android世界第一个activity启动过程
Android世界第一个activity启动过程 第一次使用Markdown,感觉不错. Android系统从按下开机键一直到launcher的出现,是一个如何的过程,中间都做出了什么操作呢.带着这些 ...
- 死磕Android_App 启动过程(含 Activity 启动过程)
1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...
- Activity启动过程详解(Android P)
本章我们来分析Activity的启动过程. 我们知道,Activity可以通过两种方式启动:一种是点击应用程序图标,Launcher会启动主Activity:另一种是在应用程序内部,调用startAc ...
最新文章
- 董明珠:别嫌工资少,满足这些条件!多高都给你
- 2019河北高职计算机专科学校录取分数线,2019河北高考专科院校录取分数线_专科各院校投档线_一品高考网...
- leetcode127. 单词接龙(bfs)
- matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
- Flask前后端分离跨域问题解决方案
- 达芬奇调色软件被曝两个远程代码执行缺陷
- API(应用程序编程接口)
- Java旅游管理系统本科生毕业设计开题报告
- InnoDB存储引擎:锁
- pythonobject转int_在Python中将元组转换为int
- Unity3D Tessellation曲面细分
- C语言之“输出100~200之间的素数”
- 8月第2周基金排行榜 | TokenInsight
- 成也苹果败也苹果,曾经女首富身价缩水一半
- 华为mate40e灭屏显示教程
- mysql assoc什么意思_mysql_assoc
- Shell 脚本 一键安装/一键卸载/一键重装 Docker
- 英语单词在原意和计算机意思,计算机英语单词:Backbone的意思
- 优恩|TVS管选型注意参数|如何快速选择TVS管
- python 色卡,如何使用opencv创建实验室色卡?