为准备面试,将最近所复习的内容以博客的形式保存起来,方便以后的查询

本文参考老罗的文章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启动过程笔记相关推荐

  1. Activity启动过程剖析

    Activity启动过程剖析 你同样可以在Github上看到这篇文章:https://github.com/onlynight/ActivityStartPrinciple 写在前面 在看这篇文章之前 ...

  2. activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)

    1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...

  3. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  4. activity启动流程_以AMS视角看Activity启动过程

    原文作者:Levi_wayne 原文地址:blog.csdn.net/u012551754/article/details/78822782 特别声明:本文转载自网络,版权归作者所有,如有侵权请联系删 ...

  5. Android系统(117)---Activity启动过程

    Activity启动过程 ###一些基本的概念 ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 ActivityThread,App的 ...

  6. Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  7. Android世界第一个activity启动过程

    Android世界第一个activity启动过程 第一次使用Markdown,感觉不错. Android系统从按下开机键一直到launcher的出现,是一个如何的过程,中间都做出了什么操作呢.带着这些 ...

  8. 死磕Android_App 启动过程(含 Activity 启动过程)

    1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...

  9. Activity启动过程详解(Android P)

    本章我们来分析Activity的启动过程. 我们知道,Activity可以通过两种方式启动:一种是点击应用程序图标,Launcher会启动主Activity:另一种是在应用程序内部,调用startAc ...

最新文章

  1. 董明珠:别嫌工资少,满足这些条件!多高都给你
  2. 2019河北高职计算机专科学校录取分数线,2019河北高考专科院校录取分数线_专科各院校投档线_一品高考网...
  3. leetcode127. 单词接龙(bfs)
  4. matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
  5. Flask前后端分离跨域问题解决方案
  6. 达芬奇调色软件被曝两个远程代码执行缺陷
  7. API(应用程序编程接口)
  8. Java旅游管理系统本科生毕业设计开题报告
  9. InnoDB存储引擎:锁
  10. pythonobject转int_在Python中将元组转换为int
  11. Unity3D Tessellation曲面细分
  12. C语言之“输出100~200之间的素数”
  13. 8月第2周基金排行榜 | TokenInsight
  14. 成也苹果败也苹果,曾经女首富身价缩水一半
  15. 华为mate40e灭屏显示教程
  16. mysql assoc什么意思_mysql_assoc
  17. Shell 脚本 一键安装/一键卸载/一键重装 Docker
  18. 英语单词在原意和计算机意思,计算机英语单词:Backbone的意思
  19. 优恩|TVS管选型注意参数|如何快速选择TVS管
  20. python 色卡,如何使用opencv创建实验室色卡?

热门文章

  1. 活动抽奖,送出10个OG角色
  2. spring+quartz定时任务启动服务后没有马上执行
  3. 获取固有节假日的时间戳数组 (美国节假日)
  4. 财政部及汇金承诺全额认购工行配股
  5. 数字图像处理——皮肤美白(Skin whitening)算法实现
  6. 首席新媒体运营黎想教程:2021最全电商运营指南
  7. python random.shuffle用法
  8. Android视频编解码
  9. 测试用例(QQ消息模块)
  10. 脱离微信运行环境,小程序如何实现微信授权登录