Android4.4 Framework分析——Activity窗口的创建过程(一)

学习android的窗口模块一周多了,感觉自己对这个模块的理解还是比较模糊,先把get的知识点记录一下。

下图是学习过程记录的activity窗口启动过程序列图,没有或者没办法完整的描绘出来,整个过程比较复杂:

整个学习过程中是参照老罗的android之旅博客和《深入理解android内核设计思想》一书来辅助的,非常感谢前辈。

Activity的整体启动过程可查看Android4.4 framework分析——Launcher中启动应用程序(startActivity)的过程的序列图,本文关注Activity窗口创建细节部分(也许不够细)。

step3~step13,是Activity上下文Context的创建过程,Activity本身是Context的间接子类,而此处创建的ContextImpl与它们的关系,可查看Android与设计模式——装饰者(Decorator)模式一文。step3~step13的详细分析,建议查看老罗的Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析,这篇文章写的比较详细。

step14~step16,是PhoneWindow的创建,我们标题提到的Activity窗口其实就是这个,所有的View都是在这window上建立起来的。

step19~step22,是WindowManager的创建过程。

step24~step33,是DecorView的创建过程,这个DecorView后面会被add到PhoneWindow里。

step40~step42,XXXActivity的onResume()的调用过程,标志着这个activity要被显示出来了。

step47,开始将窗口添加到WMS中。

step50,ViewRootImpl创建了。

step51~step57,将window与WMS关联起来了,WMS中将会记录这个window的相关信息。

step63,将逐步将我们在xml文件中的布局添加到ViewRootImpl中。

后面会用SurfaceFlinger来关联Surface之类的,这部分C++代码不太理解,整个过程还有不少地方需要加深理解,继续啃代码。。。。

右键复制图片地址,在浏览器中打开即可查看大图。

未完待续,有不对的地方,请指正。

时间: 2024-10-12 03:35:40

Android4.4 Framework分析——Activity窗口的创建过程(一)的相关文章

Android4.4 framework分析——Zygote进程的启动过程

Android启动过程中的第一个进程init,在启动过程中会启动两个关键的系统服务进程ServiceManager和Zygote.本文要介绍的就是Zygote进程的启动,Zygote俗称孵化器,专门用于生产(启动)新的进程.Zygote是在Init.rc(aosp/system/core/rootdir)里描述并由init进程启动的.相关代码如下: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --sta

Android4.4 framework分析——getContentResolver启动ContentProvider的过程

ContentProvider的创建一般是在第一次使用的时候. 没时间分析,可参考老罗的分析 http://blog.csdn.net/luoshengyang/article/details/6963418

Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理

本文主要介绍android4.4中ActivityManagerService的启动和ActivityManagerService对Activity堆栈的管理. 一.ActivityManagerService的启动 ActivityManagerService也是在SystemServer启动的时候创建的, <span style="font-size:18px;">class ServerThread { .......   public void initAndLoo

Android4.4 Framework分析——Android默认Home应用Launcher3的加载过程分析

本文主要介绍Android4.4默认Home应用Launcher3的启动过程和Launcher3的数据加载过程.Launcher的启动是开机时,ActivityManagerService准备好后开始的,下图是它的启动序列图: step1,SystemServer中,ActivityManagerService准备好了. step3, boolean resumeTopActivitiesLocked(ActivityStack targetStack, ActivityRecord targe

Android4.4 framework分析——广播的注册(BroadcastReceiver)和发送(sendbroadcast)过程分析

在Android应用程序框架中,Activity和Service类都继承了ContextWrapper类,因此,我们可以在Activity或者Service的子类中调用registerReceiver函数来注册广播接收器. 下图是在activity中注册广播的过程: step1~step3,就是一般的调用过程. step4,registerReceiverInternal()方法如下: private Intent registerReceiverInternal(BroadcastReceiv

Android4.4 framework分析——startService的创建过程

我们常用context.startService()来启动一个service,下面来分析一下这个service的启动过程,下图是service启动的序列图: step2,mBase.startService()中mBase定义为Context,它的真实实现是ContextImpl对象(看名字就知道是Context的实现类). step4,ActivityManagerNative.getDefault().startService()中ActivityManagerNative.getDefau

Android4.4 Framework分析——startService创建过程

我们经常使用context.startService()要启动service.下面就来分析这service启动过程,下图是service启动序列图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FuZ2hhaTExMjk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > step2.mBase.startService()中mBase定义为

Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只有一个Activity组件是处于激活状态的,因此,当ActivityManagerService服务激活了一个 新的Activity组件时,它就需要通知WindowManagerService服务将该Activity组件的窗口显示出来,这会涉及到将焦点和屏 幕等资源从前一个激活的Activity组件

【转】Android应用程序窗口(Activity)窗口对象(Window)创建指南

在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口.由此又可知,Activity只不过是一个高度抽象的UI组件,它的具体UI实现其实是由其它的一系列对象来实现的.在本文中,我们就将详细分析Android应用程序窗口对象的创建过程. 从前面Android应用程序窗口(Activity)实现框架简要介绍和学习计划一文可以知道,在PH