一.activity启动有两种场景:1.点击桌面图标,2.activity中通过startactivity启动新的activity
安装应用时,系统会启动一个packagemanagerservice管理服务,这个管理服务会对manifest.xml进行解析,从而得到应用的相关信息(activity、service、broadcast等,然后获得组件相关信息)。
点击图标时会调用startActivitySafely,内部调用的则是startActivity,startActivity最终调用startActivityForResult,系统的startActivityForResult返回-1即无返回值。
startActivityForResult实际是通过Instrumention类(监控程序和系统之间的交互)中的execStartActivity来启动activity,execStartActivity方法中获取AMS代理对象,通过这个代理对象启动activity,启动会调用checkStartActivityResult(检测activity存在),接着Application.scheduleLaunchActivity进行启动获取activityClientRecord对象(系统会为每一个activity组件使用activityClientRecord对象进行描述),activityClientRecord对象保存了一个loadApk对象,loadApk通过调用handleLaunchActivity方法启动activity,页面的生命周期方法也是在这个方法中调用。
网友评论