关闭
当前搜索:

获取Binder Server 的过程

ServiceManager.getService()的实现   getService()@ServiceManager.java public staticIBinder getService(String name) {            returngetIServiceManager().getService(name); } 首先要获取ServiceManagerProx...
阅读(276) 评论(0)

常用设计模式

常用设计模式 原则、法则: 一、单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合到一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把这些职责相互分离。如果能想到多余一个的动机去改变一个类,那么这个类就有多余一个的...
阅读(84) 评论(0)

App的启动过程(10)surfaceflinger对数据合成,送显

下面就是SurfaceFlinger执行实际的数据合成,然后刷新到屏幕上。 voidSurfaceFlinger::onMessageReceived(int32_t what) {          switch(what) {          case MessageQueue::INVALIDATE: {          bool refreshNeeded =handleMes...
阅读(355) 评论(0)

App的启动过程(9)surfaceflinger对vsync的处理

这个onVSyncReceived函数不复杂,感觉就是打开vsync,关掉vsync,但是要弄明白,还是要从surfaceflinger的初始化开始:          先简单概括下vsync信号的传递:首先是HWComposer产生vsync,通过回调hook_vsync,在通过mEventHandler.onVSyncReceived(disp,timestamp);到surfaceflin...
阅读(594) 评论(2)

App的启动过程(8)surfaceflinger的启动

接下来就是怎样把BufferQueue中数据,也就是GraphicBuffer中的数据显示到屏幕上,这就是surfaceflinger做的事情。          先说surfaceflinger的启动,Android7.0上,应该是在接下init.rc脚本时启动的,启动后运行的是main_surfaceflinger.cpp。 /*surfaceflinger.rc*/ service s...
阅读(403) 评论(0)

App的启动过程(7)BufferQueue的申请分配

接下来看下BufferQueue的申请分配,就是经典的生产者-消费者模型。 1)BufferQueueCore 可以认为BufferQueueCore是一个服务中心,生产者、消费者都要通过它来管理buffer。里面有一个重要的成员数组:BufferQueueDefs::SlotsType mSlots;这个BufferSlot中有一个成员变量:spmGraphicBuffer;记录这个slot...
阅读(965) 评论(0)

App的启动过程(6)面向应用程序的本地窗口surface

接下来分析下面向应用程序的本地窗口surface,这里的surface不是Surface.java,而是指Surface.cpp,它承担着应用程序中的UI显示需求,一方面要向上层提供绘制图像的画板,也就是GraphicBuffer,另一方面配合surfaceflinger完成收集应用程序的图像数据。当然,应用程序是不可能直接使用surface(后者说bufferQueue,图形缓冲区Graphic...
阅读(362) 评论(0)

App的启动过程(5)ViewTree遍历中最后一步的Draw

以上是WMS端窗口的添加,下面接着ViewTree遍历中最后一步的Draw的分析。 /* ViewRootImpl.java */ private boolean drawSoftware()à canvas =mSurface.lockCanvas(dirty); 跟View交互的是Canvas,比如draw(Canvas cs)参数,应用进程与surfaceflinger交互的是surf...
阅读(254) 评论(0)

App的启动过程(4)在WMS中注册窗口

Step3、在WMS中注册窗口 WMS中的窗口window是一个抽象的概念,由WindowState来描述状态。跟PhoneWindow不是一个概念。接着root.setView()分析。 /* ViewRootImpl.java */ ViewRootImpl除了作为ViewTree的管理者,另一个作用就是跟WMS通信,它在构造时就建立了与WMS通信的通道,这里的WindowSession...
阅读(184) 评论(0)

App的启动过程(3)应用进程侧-主线程的处理

第二阶段、应用进程侧的处理,主要是ViewTree的遍历。          接着第一段的最后调用:app.thread.scheduleLaunchActivity();这里的.thread是ApplicationThread,它是应用进程跟AMS通信的桥梁,AMS会通过:app.makeActive(mSystemThread.getApplicationThread(),mProcessS...
阅读(185) 评论(0)

App的启动过程(2)framework侧-恢复最上层的Activity

上篇文档说到:startActivity的判断处理流程,接下来会调用resumeFocusedStackTopActivityLocked@ActivityStackSupervisor.java,恢复最上层的Activity,pause之前的Activity,先看resumeFocusedStackTopActivityLocked函数的处理。 /*ActivityStackSuperviso...
阅读(294) 评论(0)

App的启动过程(1)framework侧-startActivity的判断处理流程

通过点击桌面图标,可以启动这个应用程序制定的一个Activity,后面会调用到ActivityManagerService的StartActivity的函数。经过一些判断和准备,如果顺利,AMS最终尝试启动制定的Activity,Android规定,在新的Activity启动前,原先处于resumed状态的activity会被pause。将一个activity置为pause,是通过这个activi...
阅读(387) 评论(0)
    个人资料
    • 访问:35687次
    • 积分:1711
    • 等级:
    • 排名:千里之外
    • 原创:132篇
    • 转载:38篇
    • 译文:0篇
    • 评论:9条
    最新评论