先来个序列图:

1.handleLaunchActivity
private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent, String reason) {
// If we are getting ready to gc after going to the background, well
// we are back active so skip it.
unscheduleGcIdler();
mSomeActivitiesChanged = true;
if (r.profilerInfo != null) {
mProfiler.setProfiler(r.profilerInfo);
mProfiler.startProfiling();
}
// Make sure we are running with the most recent config.
handleConfigurationChanged(null, null);
if (localLOGV) Slog.v(
TAG, "Handling launch of " + r);
// Initialize before creating the activity
if (!ThreadedRenderer.sRendererDisabled) {
GraphicsEnvironment.earlyInitEGL();
}
WindowManagerGlobal.initialize();
//这个函数调用就是onCreate和onStart生命周期的两个重要调用者
Activity a = **performLaunchActivity**(r, customIntent);
if (a != null) {
r.createdConfig = new Configuration(mConfiguration);
reportSizeConfigurations(r);
Bundle oldState = r.state;
//这个函数调用是为了调用onResume()
**handleResumeActivity**(r.token, false, r.isForward,
!r.activity.mFinished && !r.startsNotResumed, r.lastProcessedSeq, reason);
我们一般写APP,会重载Activity的onCreate函数。在这个函数里面,一般情况下会调用setContentView(R.layout.xxxx)来设置我们的布局文件,所以从这个函数开始跟踪其逻辑流程,以便从这个角度来了解WMS的基本工作流程
2.Activity setContentView
public void setContentView(@LayoutRes int layoutResID) {
getWindow().setContentView(layoutResID);
initWindowDecorActionBar();
}
这里的getWindow()就是获取PhoneWindow的实例,这个实例是在attach的时候new的,如图:

3.PhoneWindow的setContentView
@Override
public void setContentView(int layoutResID) {
// Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window
// decor, when theme attributes and the like are crystalized. Do not check the feature
// before this happens.
if (mContentParent == null) {
//主要生成DecorView实例和ViewGroup实例,具体的生成过程可以自行研究代码
installDecor();
} else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
mContentParent.removeAllViews();
}
if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,

本文详细探讨了Android应用Activity从handleLaunchActivity开始的显示流程,包括PhoneWindow的setContentView、ViewRootImpl的setView和WindowManager的添加窗口过程。通过分析关键步骤,如添加 DecorView、requestLayout以及在WMS中的窗口类型管理,揭示了UI绘制和事件处理的核心机制。
最低0.47元/天 解锁文章
1727

被折叠的 条评论
为什么被折叠?



