activity启动流程速记笔记
Activity.startActivity(Intent intent)----Activity.startActivityForResult(Intent intent)----Instrumentation.execStartActivity()----ActivityManagerNative.getDefault().startActivity----ActivityManagerService----Binder----IActivityManager----ActivityManagerProxy----ActivityManagerService.startActivity----ActivityManagerService.startActivityAsUser设置了userId-----ActivityStackSuperviso.startActivityMayWait主要进行了Intent的检查----ActivityStackSuperviso.startActivityLocked生成ActivityRecord-----ActivityStackSuperviso.startActivityUncheckedLocked首先判断了启动模式------上面的步骤完成了Activity的目标栈的判断(targetStack)------ActivityStack.startActivityLocked将Activity添加到了栈顶,初始化了WindowManager--------StackSupervisor.resumeTopActivitiesLocked判断目标任务栈是否在前------ActivityStack.resumeTopActivityLocked确保当前栈顶的Activity是否resumed-------ActivityStack.resumeTopActivityInnerLocked 1,首先让现在正在运行的Activity调用startPausingLocked进入pause状态 2.如果要启动的Activity不为空且所在的进程存在的话,所在的进程执行scheduleResumeActivity启动Activity 3.如果Activity为空,所在的进程不存在,执行ActivityStackSupervisor.startSpecificActivityLocked
ActivityStack.startPausingLocked-------ApplicationThread.schedulePauseActivity主要handler发送消息-----ApplicationThread.handlePauseActivity----ApplicationThread.performPauseActivity----- callCallActivityOnSaveInstanceState(r)----Instrumentation.callActivityOnPause---Activity.performPause---Activity.onPause()
ApplicationThread.handleReusmeActivity----ApplicationThread.performReusmeActivity----- Instrumentation.callActivityOnReusme---Activity.performReusme---Activity.onReusme()
ActivityStackSupervisor.startSpecificActivityLocked------ActivityManagerService.startProcessLocked-----Process.start方法,并且传入类名android.app.ActivityThread-------startViaZygote-----zygoteSendArgsAndGetResult最后通过Zygote孵化出了我们刚才传入的ActivityThread,也就是我们很熟悉的应用入口进程,来到它的main方法----ActivityThread.main()------ Looper.prepareMainLooper()Looper.loop();----ActivityThread thread = new ActivityThread(); thread.attach(false)---------ActivityManagerService.attachApplication----------ActivityManagerService.attachApplicationLocked-------ActivityStackSupervisor.realStartActivityLocked-------ApplicationThread.scheduleLaunchActivity-----ActivityThread.handleLaunchActivity----ActivityThread.performLaunchActivity----packageInfo.getClassLoader() mInstrumentation.newActivity----- activity.attach(---- mInstrumentation.callActivityOnCreate activity.performStart(); mInstrumentation.callActivityOnRestoreInstanceState(----- prePerformCreate(activity); activity.performCreate(icicle, persistentState); postPerformCreate(activity);---activity.performCreate()----activity.Create()
Looper.loop();----ActivityThread thread = new ActivityThread(); thread.attach(false)---------ActivityManagerService.attachApplication----------ActivityManagerService.attachApplicationLocked-------ActivityStackSupervisor.realStartActivityLocked-------ApplicationThread.scheduleLaunchActivity-----ActivityThread.handleLaunchActivity----ActivityThread.performLaunchActivity----packageInfo.getClassLoader() mInstrumentation.newActivity----- activity.attach(---- mInstrumentation.callActivityOnCreate activity.performStart(); mInstrumentation.callActivityOnRestoreInstanceState(----- prePerformCreate(activity); activity.performCreate(icicle, persistentState); postPerformCreate(activity);---activity.performCreate()----activity.Create()activity启动流程速记笔记的更多相关文章
- Cocos2d-x3.3RC0的Android编译Activity启动流程分析
本文将从引擎源代码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,以下是具体分析. 1.引擎源代码Jni.部分Java层和C++层代码分析 watermark/2 ...
- 2018-01-13 view绘制流程-activity启动流程-window-decorView-ViewRootImpl关系
1.activity启动流程: https://www.jianshu.com/p/927ca995bca6 http://blog.csdn.net/qian520ao/article/detail ...
- 《转》深入理解Activity启动流程(四)–Activity Task的调度算法
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...
- 《转》深入理解Activity启动流程(三)–Activity启动的详细流程2
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...
- 《转》深入理解Activity启动流程(三)–Activity启动的详细流程1
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...
- 《转》深入理解Activity启动流程(二)–Activity启动相关类的类图
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 在介绍Activity的详细启动流程之前,先为大家介绍Act ...
- 《转》深入理解Activity启动流程(一)–Activity启动的概要流程
本文原创作者:Cloud Chou. 原文地址:http://www.cloudchou.com/android/post-788.html Android中启动某个Activity,将先启动Acti ...
- 深入理解Activity启动流程(四)–Activity Task的调度算法
本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启动的概要流程 深入理解Activity启动流程(二)- ...
- 深入理解Activity启动流程(三)–Activity启动的详细流程2
本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--A ...
随机推荐
- Java编程的逻辑 (59) - 文件和目录操作
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- 记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题
业务背景: 需要通过redis判断当前用户是否是新用户.当出现新用户后,会将该用户放入到redis中,以标明该用户已不是新用户啦. 出现问题: 发现入库时,并没有新用户入库,但我看了数据了,确实应该是 ...
- ionic获取ios唯一设备id的解决方案
经常有朋友来问这个问题. 每次都去解释这个问题也浪费不少时间, 所以还是开一篇文章, 把这个问题说清楚吧. 先纠正一个误区吧: 有同学可以通过ionic natvie的device插件获取. 我们在文 ...
- 005.Zabbix-Agent客户端安装
一 安装Zabbix-Agent [root@imxhy ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-rel ...
- 戏说 Spring MVC 框架
Spring MVC 是 Spring 框架的一部分,和 Struts 一样都是属于 web 层框架,根据项目分层的思想,一个项目基本可以分为持久层,业务层和 web 层.而 Spring MVC 主 ...
- 【WIN10】WIN2D——基本圖形的繪製
DEMO下載地址:http://yunpan.cn/c3iNuHFFAcr8h (提取码:8e48) 先看一個截圖: 繪製了一些基本形狀. DEMO的繪製代碼都非常簡單,不想在博客裡細說了,看代碼更為 ...
- BZOJ.1034.[ZJOI2008]泡泡堂(贪心)
题目链接 容易想到田忌赛马.但是是不对的,比如2 3对1 3,按田忌赛马策略会3->1 2->3,但是3->3 2->1显然更优. 而如果按己方最强>=对方最强则开打,也 ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
- [POJ1144]Network
来源:Central Europe 1996 思路:Tarjan求割点. 一个点$x$为割点当且仅当: 1.$x$为根结点且有两棵不相交的子树. 2.$x$不为根结点且它的子树中没有可以返回到$x$的 ...
- 【GDKOI 2016】地图 map 类插头DP
Description 对于一个n*m的地图,每个格子有五种可能:平地,障碍物,出口,入口和神器.一个有效的地图必须满足下列条件: 1.入口,出口和神器都有且仅出现一次,并且不在同一个格子内. 2.入 ...