关闭
当前搜索:

Android GUI系统-ViewTree的绘图遍历(六)

ViewTree的绘图遍历 绘图遍历也就是ViewTree遍历过程的最后一步。这个过程有3个核心的步骤: 1)canvas= mSurface.lockCanvas(dirty); 2)mView.draw(canvas); 3)surface.unlockCanvasAndPost(canvas); 和View直接交互的是canvas,可以认为是作画的工具集。应用程序跟surf...
阅读(25) 评论(0)

Android GUI系统-ViewTree遍历过程(五)

ViewTree的遍历过程performTraversals。 遍历过程主要对应三个函数performMeasure(计算大小),perforLayout(计算位置),performLayout(绘制内容)。具体看下这三个步骤执行的条件,及怎么执行的? 1)performMeasure private void performTraversals() @ViewRootImpl....
阅读(34) 评论(0)

Android GUI系统-ViewTree的遍历(四)

那些情况会引起ViewTree的遍历 1)应用程序刚启动时,会在构造出整棵ViewTree后,执行第一次遍历。 public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) @ViewRootImpl.java{ requestLayout(); } public vo...
阅读(30) 评论(0)

Android GUI系统-ViewTree的管理者(三)

作为ViewTree的管理者ViewRoot,是怎么工作的。 一,ViewRootImpl跟WMS间的通信 ViewRootImpl.java在构造的时候,需要建立跟WMS的通信的双向通道: ViewRootImpl –>WMS:IwindowSession WMS →ViewRootImpl :Iwindow IwindowSession和IWindow是匿名的Binder...
阅读(42) 评论(0)

Android GUI系统-ViewTree的创建(二)

View树的创建过程 当AMS通知应用进程来启动一个Activity任务时,最终这个请求会转化为ActivityThread中的一个消息LAUNCH_ACTIVITY,同类型的消息还是RESUME_ACTIVITY,PAUSE_ACTIVITY等。主线程ActivityThread对这个LAUNCH_ACTIVITY消息的处理是整个ViewTree建立的起点。 private cl...
阅读(44) 评论(0)

Android GUI系统-View框架(一)

View框架 相关元素的关系: 1)View和ViewRoot,ViewRoot可以理解为View树的管理者,是ViewRootImpl类型的对象,Activity和ViewRoot是一对一的关系,他有一个成员变量mView,是View树的根,也就是xml布局的顶层元素,ViewRoot的核心任务是跟WMS通信。 2)Activity和Window,Activity有一个成员变量mW...
阅读(65) 评论(0)

Android 7.1 GUI系统-窗口管理WMS-动画的执行(七)

前面只是动画资源的加载过程,下面看下动画是怎么执行起来的? 前面在分析窗口申请的过程中,分析过relayoutWindow中的调用performSurfacePlacement,在这个函数的最后调用了mService.scheduleAnimationLocked(),来安排动画的执行。 void scheduleAnimationLocked() @WindowManagerSe...
阅读(46) 评论(0)

Android 7.1 GUI系统-窗口管理WMS-窗口动画、应用动画的加载(六)

窗口动画的加载: Activity窗口显示的过程中,除了窗口的申请,窗口大小的计算,窗口层级的设置等,还有窗口切换过程中的启动窗口的添加、销毁,窗口切换动画。 启动窗口,当一个新的Activity启动时系统可能会先显示一个启动窗口,这个启动窗口会等到Activity的主界面显示出来后消失,主要是为应用启动做一个过度。 启动窗口跟普通窗口本质上没去区别,大概列出调用流程,不过详细分析: 当需...
阅读(56) 评论(0)

Android 7.1 GUI系统-窗口管理WMS-窗口大小计算(五)

窗口大小的计算 一个应用窗口,除了应用程序本身的内容外,还有状态栏,可能还有输入法窗口,状态栏的大小是固定的,输入法窗口可以在AndroidManifest.xml中配置,相关属性如下: 以state开头的表示当Activity成为焦点时软键盘是隐藏还是可见,以adjust开头的表示如何调整Activity窗口以容纳软键盘。 frameworks/base/core/res/res/va...
阅读(71) 评论(0)

Android 7.1 GUI系统-窗口管理WMS-Surface管理(四)

Surface的管理 Surface是窗口能真正显示到物理屏幕上的基础,由surfaceflinger管理,可以通过WindowStateAnimator.java中的变量mDrawState来查看每个窗口相关的surface的状态。 surface有5中状态: WindowStateAnimator.java //Surface还没有创建。 staticfinal int NO_SUR...
阅读(581) 评论(0)

Android 7.1 GUI系统-窗口管理WMS-窗口添加(三)

窗口的添加过程。 Android中窗口通常分为两大类,一是系统窗口,一是应用窗口。添加的过程上,WMS不会特别区分这两类窗口,只是在权限和层级有差别。 1)系统窗口的添加,以状态栏为例。 private void addStatusBarWindow() @PhoneStatusBar.java{ //把R.layout.super_status_bar资源inflate...
阅读(35) 评论(0)

Android 7.1 GUI系统-窗口管理WMS-窗口属性(二)

窗口类型及属性。 1),Android都有那些窗口类型,定义在WindowManager.java的内部类LayoutParams中。 public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable @WindowManager.java{ //代表通常的应用程序窗口的开始。 pu...
阅读(45) 评论(0)

Android 7.1 GUI系统-窗口管理WindowManagerService(一)

一,WindowManagerService窗口管理员。 什么是窗口?直观的看是一个界面,比如桌面,比如打开的一张照片。 从SurfaceFlinger的角度看,它是一个layer,当向surfaceflinger申请一个surface时,实际是创建了一个layer,承载着跟窗口有关的数据。 从WindowManagerService的角度看,它是windowState,管理着窗口有关的状态...
阅读(346) 评论(0)

Android 7.1 GUI系统-vsync信号的处理(六)

一旦有事件发生,MessageQueue::cb_eventReceiver就会执行,进一步调用eventReceiver,如果事件类型是DisplayEventReceiver::DISPLAY_EVENT_VSYNC,开始处理UI数据的合成。 MessageQueue.cpp int MessageQueue::cb_eventReceiver(int fd, int events...
阅读(522) 评论(0)

Android 7.1 GUI系统-vsync信号的产生和接收(五)

Vsync信号的产生。 以下代码基于高通msm8909芯片,android7.1的源码。 Vsync信号的产生有两种来源,一种是硬件,也就是显示模块产生;一中是软件模拟,因为目前基本都是硬件产生的,所以软件模拟的代码就没有分析的必要了。 接下来分析由硬件产生的vsync是怎么传到surfaceflinger的。 这个硬件源就是HWComposer,它一方面管理这composer的hal模块...
阅读(319) 评论(0)
20条 共2页1 2 下一页 尾页
    个人资料
    • 访问:35862次
    • 积分:1724
    • 等级:
    • 排名:千里之外
    • 原创:133篇
    • 转载:38篇
    • 译文:0篇
    • 评论:9条
    最新评论