返回
Android中Activity启动流程后篇
Android
2024-01-17 03:24:50
好的,我将为您撰写一篇名为《Android中Activity启动流程后篇》的博文,以下是该博文的内容:
正文
在Android Q中,从Android Framework层通过Binder的方式调用到应用进程启动Activity的相关流程如下:
- Android Framework中的ActivityManagerService接收到启动Activity的请求后,会创建一个新的Intent对象,并将需要启动的Activity的组件名(ComponentName)添加到Intent中。
- ActivityManagerService将创建的Intent对象通过Binder接口发送给应用进程中的ActivityManager,即ActivityManagerProxy对象。
- ActivityManagerProxy接收到Intent对象后,会调用ActivityThread的handleLaunchActivity方法来处理启动Activity的请求。
- handleLaunchActivity方法会创建一个新的ActivityRecord对象,并将启动Activity的Intent对象添加到ActivityRecord对象中。
- handleLaunchActivity方法还会创建一个新的ActivityClientRecord对象,并将ActivityRecord对象添加到ActivityClientRecord对象中。
- handleLaunchActivity方法会将ActivityClientRecord对象添加到ActivityManager的mActivities集合中。
- handleLaunchActivity方法会调用ActivityThread的scheduleLaunchActivity方法来安排启动Activity。
- scheduleLaunchActivity方法会将ActivityRecord对象添加到ActivityThread的mActivitiesReadyForService集合中。
- ActivityThread的main方法会不断的轮询mActivitiesReadyForService集合,如果集合中有ActivityRecord对象,则会调用ActivityRecord对象的performLaunchActivity方法来启动Activity。
- performLaunchActivity方法会调用ActivityThread的attachApplication方法来附加应用进程的Application对象。
- attachApplication方法会调用ActivityThread的installActivity方法来安装Activity。
- installActivity方法会调用Activity的attach方法来附加Activity到ActivityThread。
- attach方法会调用Activity的onCreate方法来创建Activity。
- onCreate方法会调用Activity的setContentView方法来设置Activity的布局。
- setContentView方法会调用Activity的findViewById方法来获取布局中的控件。
- findViewById方法会调用View的findViewById方法来获取控件。
- View的findViewById方法会调用ViewRootImpl的findViewById方法来获取控件。
- ViewRootImpl的findViewById方法会调用View的dispatchFindViewById方法来获取控件。
- dispatchFindViewById方法会调用View的findViewTraversal方法来获取控件。
- findViewTraversal方法会调用View的findViewByIdInner方法来获取控件。
- findViewByIdInner方法会调用View的dispatchFindViewByIdRecursive方法来获取控件。
- dispatchFindViewByIdRecursive方法会递归的调用子View的dispatchFindViewByIdRecursive方法来获取控件。
- 当找到控件后,View的findViewById方法会返回控件。
- setContentView方法会将获取到的控件设置为Activity的布局。
- onCreate方法会调用Activity的onStart方法来启动Activity。
- onStart方法会调用Activity的onResume方法来恢复Activity。
- onResume方法会调用Activity的onPostResume方法来完成Activity的恢复。
基于中篇所介绍的启动Activity的流程进行进一步的延伸,可以总结出以下几点:
- Android Q中启动Activity的流程与Android P基本相同,只是在细节上有一些差异。
- Android Q中启动Activity的流程可以分为三个阶段:
- Android Framework层启动Activity的阶段。
- 应用进程中启动Activity的阶段。
- Activity的启动阶段。
- Android Q中启动Activity的流程涉及到多个组件,包括ActivityManagerService、ActivityManager、ActivityThread、ActivityRecord、ActivityClientRecord等。
- Android Q中启动Activity的流程是异步的,即Activity的启动过程不会阻塞UI线程。
总结
本文主要介绍了Android Q上从Android Framework层通过Binder的方式调用到应用进程启动Activity的相关流程,以及基于中篇介绍的启动Activity的流程进行进一步的延伸。