activity两种启动:launcher 启动 和 activity 调用启动
一、launcher 启动调用 launcher 的 startActivitySafely 方法启动
launcher也是一个应用,是桌面应用程序。我们安装的应用程序安装好后都会在launcher桌面应用程序显示一个启动图标。当我们点击图标的时候,就会启动 activity。但是要启动的activity是一个应用的activity,这个应用有个主启动的activity,我们需要在配置文件AndroidManifest.xml中配置这个应用要启动的主activity。这个配置需要在acitity的intent-filter节点的 category下配置LAUNCHER,告诉我们程序这个activity是主启动的。
二、activity 启动activity 调用Activity.startActivity
启动的相关类:
Activity:startActivity方法的真正实现在Activity中,包括实现生命周期方法
Instrumentation:用来辅助Activity完成启动Activity的过程
ActivityThread:真正启动Activity的实现都在这里
下面分析下启动流程:看startActivity源码:
看上面源码,实际startActivity调用的是startActivityForResult。接着看源码
实际上调用的启动activity方法的还是Instrumentation类调用:execStartActivity这个方法。
而在execStartActivity这个方法中我们可以看到
真正执行activity的启动过程的是ActivityManagerNative.getDefault().startActivity
执行启动activity之后,有一个代码检查结果。
ActivityManagerNative是抽象类,getDefault() 方法返回的是IActivityManager,也仅仅是一个接口而已;那么实际上我们跟踪代码会发现startActivity()也仅仅是IActivityManager的一个方法而已。
IApplicationThread执行了启动activity,那么谁实现了该接口呢?当然是ApplicationThread,这个类是ActivityThread的内部类。里面很多的方法都对应了相关的activity生命周期方法,我们仅仅来看看scheduleLaunchActivity:
网友评论