Android 4.4(KitKat)窗口管理子系统 体系框架 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    窗口管理系统是Android中的主要子系统之一,它涉及到App中组件的管理,系统和应用窗口的管理和绘制等工作,

Android 4.4(KitKat)窗口管理子系统 体系框架

。由于其涉及模块众多,且与用户体验密切相关,所以它也是Android当中最为复杂的子系统之一。一个App从启动到主窗口显示出来,需要App,ActivityManagerService(AMS),WindowManagerService(WMS),SurfaceFlinger(SF)等几个模块相互合作。App负责业务逻辑,绘制自己的视图;AMS管理组件、进程信息和Activity的堆栈及状态等等;WMS管理Activity对应的窗口及子窗口,还有系统窗口等;SF用于管理图形缓冲区,将App绘制的东西合成渲染在屏幕上。下面分几个部分进行分析。

    窗口管理系统的主要框架及各模块之间的通讯接口大体如下:

   

    <喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+u/nT2kJpbmRlcrXEsb612Ln9s8y199PDo6hMUEOjqcjDQW5kcm9pZLXExKO/6bzk8e66z7bIuPy1zaOsveG5ubj8vNPH5c76oaPDv7j2xKO/6bj3y77G5Nawo6yyos/yxuTL/MSjv+nM4bmpvdO/2qGjvfizzLrNdWlk1eLQqUxpbnV41tC1xLv61sa21NXi0KnEo7/pzOG5qcHLzOzIu7XEsaO7pKOsyrm1w8+1zbO4/LzTwrOw9KGjxKO/6dauvOS+rbOjyrnTw0MvU7XEveG5uaOstvhTZXJ2aWNlsb7J7dKyv8nE3MrHyrnTw8bky/xTZXJ2aWNltcRDbGllbnSho77ZwP3AtMu1o6zI57n7U2VydmljZbXEyrXP1r3QWFhYTWFuYWdlclNlcnZpY2WjrMTH0ruw48v8ttRDbGllbnTM4bmpvdO/2klYWFhNYW5hZ2Vyo6zIu7rzQ2xpZW500qrTw1NlcnZpY2W1xMqxuvKx47vhyerH69K7uPa90EJwWFhYTWFuYWdlcrXEtPrA7bbUz/OjrMv8ysfUtrbLQm5YWFhNYW5hZ2Vysb612LbUz/PU2kNsaWVudLbLtcS0+sDtoaO0+sDtttTP80JwWFhNYW5hZ2VyyrXP1sHLSVhYWE1hbmFnZXK1xMv509C907/ao6zWu7K7uf3A78PmtcS6r8r9trzKx7/H19OjrNa7uLrU8LLOyv21xNe8sbijrMi7uvO+zbX308PUtrbLttTP88il1rTQ0KGj1La2y7XEtcRCblhYWE1hbmFnZXK21M/zvLDG5LzMs9DA4MrH1ebV/df2ysK1xKOsQm5YWFhNYW5hZ2VyvMyz0NfUSVhYWE1hbmFnZXIuU3R1YrPpz/PA4KOsyrXP1sHLSVhYWE1hbmFnZXK907/aoaNTdHVivs3I58bkw/vX1tK70fmjrMrHQm5YWFhNYW5hZ2VytcS8zLPQwODU2kJuWFhYTWFuYWdlctbQtcShsLmz19OhsaGjzai5/bX308PV4tCpvdO/2rHjv8nS1LX308O1vdS2tsu1xFNlcnZpY2W5psTcwcuho7jFxO7Jz8DgJiMyMDI4NDvUtrPMZ2RitffK1KOsaG9zdLv6yc+1xGdkYrrNZ3Vlc3TJz7XEZ2Ric2VydmVyz+DBrNLUuvOjrNTaaG9zdMnPx8PD/MHuu+HIw2dkYnNlcnZlcsil1rTQ0KOstau40L71vs3P8crH1Npob3N0sb612Na00NDSu9H5oaPV4rb5tcRnZGJzZXJ2ZXK+zczhuanBy8DgJiMyMDI4NDvT2lN0dWK1xLmmxNyhozwvcD4KPHA+IDwvcD4KPHA+1eLW1tS2s8y199PDxKPQzbXEvajBorn9s8zSu7Djyse31rLjtM61xKGjscjI51dpbmRvd01hbmFnZXJHbG9iYWy74dPrV01TvfjQ0MGsvdOjrFZpZXdSb290SW1wbLvh0+tXTVPW0LXEU2Vzc2lvbr340NDBrL3To6y437Ljz8jT67jfsuPNqNDFo6zNrMqxsO/W+r2owaK1zbLjvOS1xM2o0MWjrMi7uvO1zbLj0+u1zbLj1rG9082o0MWho7TyuPaxyLe9o6zVxcj9ysdBsr/DxbXE1LG5pKOsy/vP69Kqus1Csr/DxbrP1/e449K7uPa77ravo6zL+9K7sOOyu7vh1rG907Pluf3IpUKyv8PFsKS49s7KtcSho8v50tTL+8/Ius3X1Ly6tcTW97ncwO7LxMu1o6zO0tKqus1Csr/DxbrP1/ejrNPaysfA7svE1dK1vUKyv8PFtcTW97nczfXO5aOsy7XE47P2uPbIy7DJoaPT2srHzfXO5brN1dTB+cu1o6zE47i61PDV4srCtvmwyaOssqK45svfwctBsr/Dxdb3udzA7svEoaPA7svE1Nm45svfz8LK9NXFyP2jrNXUwfnKx0Kyv8PFvdO/2sjLo6zE49LUuvPWsb3Tus3L+8Gqz7WwyaGj09rKx9XFyP26zdXUwfnS1Lrzvs3Wsb3TwarPtcHLoaPI57n7us/X99bQ09DQ6NKqs6zUvdfUvLrIqM/etcSy2df3o6zL+8PH1NnP8rj319S1xNb3udzJ6sfroaOxyMjnQXBw0+tXTVO1xMGsvdOjrMrXz8i74b2owaLSu7j2U2Vzc2lvbrW9V01To6zWrrrzvs274c2ouf1JV2luZG93U2Vzc2lvbr3Tv9rT61dNU9bQtcRTZXNzaW9u1rG9082o0MWho7u509DA/cjnV01Tus1TRs/ItLS9qFN1cmZhY2VTZXNzaW9uo6zG5NbQu+G0tL2oU3VyZmFjZUNvbXBvc2VyQ2xpZW50o6y3w87KU3VyZmFjZUNvbXBvc2VyQ2xpZW50yrG74dTaU0bW0LS0vahDbGllbnTT69auttTTpqOs1eK49kNsaWVudMq1z9bBy0lTdXJmYWNlQ29tcG9zZXJDbGllbnS907/ao6zWrrrzU3VyZmFjZUNvbXBvc2VyQ2xpZW50u+HNqLn9uMO907/a0+tTRtbQtcRDbGllbnTWsb3TzajQxaGjPC9wPgo8cD4gPC9wPgo8cD6/tLT6wuu5/bPM1tCjrLj3uPa21M/zvOS1xMr9wb+8sLbU06a52M+1vq2zo8jDyMu77M/9o6zPwsPmwdC+2cHL1NrSu7Djx+m/9s/CuPe21M/z1q685LXEyrXM5bnYz7XNvKGjxuTW0LHqyau1xMrHz+DTptfTz7XNs9bQsci9z7v5tKG6y9DEtcTA4KGjPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140715/20140715085737122.jpg" alt="\">

    要注意的几点:1. App中可以没有Activity,也可以没有PhoneWindow和DecorView,比如一个显示浮动窗口的Service,

电脑资料

Android 4.4(KitKat)窗口管理子系统 体系框架》(https://www.unjs.com)。2. Task中的Activity可以来自不同进程,比如App运行过程中打开相机App拍照。3. WindowState代表WMS中的一个窗口,这和App端的Window类是不一样的,尽管很多时候一个Window类(即PhoneWindow)有一个对应的WindowState,但那不是绝对的。一个Activity在WMS中有对应的AppWindowToken,一个AppWindowToken又可以包含多个WindowState,因为除了主窗口外,还可能有子窗口和启动窗口。此外对于系统窗口,WindowState还可能不对应AppWindowToken。4.这里的Application指的是App端的一个进程,它不同于AndroidManifest.xml中的标签。后者是配置文件中对组件的管理者,它和进程之间没有本质关系,通过android:process标签可以让同一个下的组件跑在多个进程,也可以让多个中的组件跑在同一个进程。所以如果是定义的Application的话和ProcessRecord就是m:n的关系了。以下谈到Application都是指一个App的进程。

    首先分析下App端的结构。移动平台一般显示区域有限,要完成一个工作往往不是一屏内容中能搞定的,所以Android中有了Activity的概念,让用户可以把相关的子内容放到单独的Activity中,然后通过Intent在Activity间跳转。类似于浏览网页,点击链接跳转到另一个网页。这些同一交互过程中的一系列Activity成为一个Task。这些Activity运行在主线程ActivityThread中。Activity要展现出来的主视图是DecorView,它是一棵视图树。ViewRootImpl负责管理这个视图树和与WMS交互,与WMS交互通过WindowManagerImpl和WindowManagerGlobal。DecorView被包含在系统的通用窗口抽象类Window当中。视图对应的图形缓冲区由Surface管理。其中涉及到的主要的类包括下面几个:

    Activity:描述一个Activity,它是与用户交互的基本单元。

    ActivityThread:每一个App进程有一个主线程,它由ActivityThread描述。它负责这个App进程中各个Activity的调度和执行,以及响应AMS的操作请求等。

    ApplicationThread:AMS和Activity通过它进行通信。对于AMS而言,ApplicationThread代表了App的主线程。简而言之,它是AMS与ActivityThread进行交互的接口。注意ActivityThread和ApplicationThread之间的关系并不像Activity与Application。后者的关系是Application中包含了多个Activity,而前者ActivityThread和ApplicationThread是同一个东西的两种"View",ApplicationThread是在AMS眼中的ActivityThread。

    ViewRootImpl:主要责任包括创建Surface,和WMS的交互和App端的UI布局和渲染。同时负责把一些事件发往Activity以便Activity可以截获事件。每一个添加到WMS中的窗口对应一个ViewRootImpl,通过WindowManagerGlobal向WMS添加窗口时创建。大多数情况下,它管理Activity顶层视图DecorView。总得来说,它相当于MVC模型中的Controller。

最新文章