Activity启动过程笔记

简介: Activity启动过程笔记

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



相关文章
|
Android开发 UED 开发者
探究活动Activity(2)界面跳转及生命周期
探究活动Activity(2)界面跳转及生命周期
293 0
探究活动Activity(2)界面跳转及生命周期
|
XML 数据可视化 Java
探究活动Activity
探究活动Activity
探究活动Activity
|
开发框架 监控 数据可视化
|
存储 XML Java
Activity 复习笔记 —— 唠唠生命周期
Activity 复习笔记 —— 唠唠生命周期
Activity 复习笔记 —— 唠唠生命周期
|
缓存 Java 程序员
庖丁解牛 Activity 启动流程
庖丁解牛 Activity 启动流程
庖丁解牛 Activity 启动流程
|
存储 调度 Android开发
Android 深入研究之 ✨ Activity启动流程+Activity生命周期✨
Activity分析目录 前言 Activity生命周期 1.activity的四个状态 2.activity的生命周期 3.activity优先级 Activity启动流程 Activity的启动流程分析