Activity启动流程中AMS的具体流程_activity ams-程序员宅基地

技术标签: android  

调用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生命周期。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37698652/article/details/79550786

智能推荐

异步FIFO设计-程序员宅基地

文章浏览阅读590次,点赞26次,收藏26次。同步后的写指针与读指针进行比较,如果它们相等或满足其他预定的条件,就表明FIFO为空,从而产生空逻辑信号。产生空状态信号时,实际FIFO中有数据,相当于提前判断了空状态信号,此时不再进行读FIFO数据操作也是安全的。此时经常使用多余的1bit分别当做读写地址的拓展位,来区分读写地址相同的时候,FIFO的状态是空还是满状态。(格雷码是一种二进制编码方式,其相邻的两个数值只有一个位的差异,这种特性使得格雷码在变化时只涉及到一个位的翻转,从而减少了由于多位同时变化可能带来的不稳定性和错误。

Cannot load configuration class_cannot load configuration class: com.jsh.erp.erpap-程序员宅基地

文章浏览阅读3.0k次。将SDK从16设置为1.8,如下图_cannot load configuration class: com.jsh.erp.erpapplication

java csv 复杂表头_POIUtil(动态复杂表头、动态数据、多线程、合并数据列的POI导出成Excel工具附带生成csv文件)...-程序员宅基地

文章浏览阅读426次。package com.sckj.base.util;import java.io.IOException;import java.lang.reflect.Constructor;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.ut..._csv能复杂表头吗

【Python】Python中input的使用_python中input的用法-程序员宅基地

文章浏览阅读1.8w次。input有类似c中的scanf函数。Python2中input使用如下:>>>x = input("x: ")x: 3>>>y = input("y" )y: 4>>> print x*y12但是Python3中input使用会有如下的提示:>>> x=input("x:")x:3>>> y=input("y:")y:5>>> print (x*y)Traceback (mos_python中input的用法

sql server异地备份_sql2008r2 异地备份-程序员宅基地

文章浏览阅读562次。服务器名为:jiliangserver 备份的数据库为:JLSDB declare @strsql varchar(1000) declare @strdirname varchar(50) declare @strcmd varchar(50) dec_sql2008r2 异地备份

postfix报错postfix: fatal: parameter inet_interfaces: no local interface found for ::1_postfix[2649]: fatal: parameter inet_interfaces: n-程序员宅基地

文章浏览阅读4.1k次。From: http://blog.csdn.net/xiangshanqishi/article/details/23439397启动postfix出错,查看centos中的postfix日志more /var/log/maillogpostfix: fatal: parameter inet_interfaces: no local interface found f_postfix[2649]: fatal: parameter inet_interfaces: no local interface found fo

随便推点

找回word文件的两种密码_word文档保护默认密码是多少-程序员宅基地

文章浏览阅读773次。Word文档的密码也有两种:一种是打开密码,一种是编辑限制两种密码加密后的效果也是不一样的:设置了打开密码的Word文档,是在打开文件的时候需要输入密码,保护文件内容不被其他人看到。当我们输入了正确的word密码,进入到文件之后,就一些都正常了,可以正常阅读、正常编辑word文件。设置了编辑限制的Word文档,打开文件的时候不需要输入密码,打开之后能够查看Word文档内容,但是想要编辑WORD文件的时候,保护文件内容不被修改,需要输入正确的Word密码,将限制编辑取消才能够正常编辑Word文档。两种密码如果_word文档保护默认密码是多少

Cocos2d场景编辑器CocosBuilder使用教程-程序员宅基地

文章浏览阅读162次。在使用Cocos2d-iPhone框架开发iOS游戏的时候,对于每一个场景(CCScene)的编辑是比较麻烦的,好在有外国的牛人提供了非常棒的场景编辑器----CocosBuilder。下面我将详细介绍CocosBuilder结合Cocos2d-iPhone框架的使用。 框架:Cocos2d-iPhone v2.0-rc2 工具:CocosBuilde..._coco2d场景编辑

el-input输入保留两位小数_el-input保留两位小数-程序员宅基地

文章浏览阅读1k次。el-input输入保留两位小数_el-input保留两位小数

MyBatis多条件查询_mybatis if test 多条件-程序员宅基地

文章浏览阅读1.8k次。在MyBatis中进行多条件查询可以使用动态SQL来构建查询语句。_mybatis if test 多条件

Chrome 您的连接不是私密连接 解决办法_chrome您的连接不是私密连接-程序员宅基地

文章浏览阅读1.9w次,点赞8次,收藏25次。您的连接不是私密连接今天打开b站出现不是私密连接被拦截的情况,试了网上好多种方法都没有效果,最后刷新DNS给解决了,特此记录一下先附上错误截图攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)。了解详情NET::ERR_CERT_INVALID将您访问的部分网页的网址、有限的系统信息以及部分网页内容发送给 Google,以帮助我们提升 Chrome 的安全性。隐私权政策x.x.x.x 通常会使用加密技术来保护您的信息。Google Chrome 此次尝试连接到_chrome您的连接不是私密连接

让Jenkins帮你自动布署Vue项目-程序员宅基地

文章浏览阅读177次。作者:zhou_webhttps://segmentfault.com/a/1190000019212628实现目标本地push代码到GitHub,Webhook自动触发jenkins..._jenkins配置generic webhook trigger 自动部署vue项目

推荐文章

热门文章

相关标签