- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android 图形显示
Android 图形显示
在使用Marvell PXA310平台开发android过程中, 一直碰到图形显示相关问题。一直也没下定决心理一理图形显示相关流程,一方面是因为这块技术涉及到一些图形算法,看起来比较费劲,另一方面原因可以归结为自己的浮躁。直到如今,仍然碰到图形显示相关的问题,而仍是跟几个月前一样束手无策,才决定写下这篇文档。不求完全厘清图形显示相关代码,只要能够由此而引入门即功德圆满。
Overview
Android中的图形系统采用Client/Server架构。Server (即SurfaceFlinger)主要由c++代码编写而成。Client端代码分为两部分,一部分是由Java提供的供应用使用的api,另一部分则是由c++写成的底层实现。下图概要介绍了android图形系统的架构以及使用到的主要组件。
Android图形系统中一个重要的概念和线索是surface。View及其子类(如TextView, Button)要画在surface上。每个surface创建一个Canvas对象(但属性时常改变),用来管理view在surface上的绘图操作,如画点画线。每个canvas对象对应一个bitmap,存储画在surface上的内容。每个surface有一个front buffer和一个back buffer。每个window有一个对应的surface. window内容绘制在view的bitmap后传给surface。surface作为一个service提供给系统使用,由service manager(frameworks/base/services/java/com/android/server/SystemSever.java, frameworks/base/cmds/system_server/library/system_init.cpp)初始化。surface server的代码位于frameworks/base/libs/surfaceflinger下。有几个对象与Surface概念紧密相关1. Java Surface (frameworks/base/core/java/android/view/Surface.java)。该对象被应用间接调用(通过SurfaceView, ViewRoot等), 应用需要创建surface,(并同时创建canvas), 将图形绘制到这个对象上并最终投递到屏幕上。2. C++ Surface (frameworks/base/libs/ui/Surface.cpp。 这个对象被Java Surface通过Jni 调用,实现Java Surface 的功能3. ISurface (以及其派生类BnSurface)。这个对象是应用和server之间的接口。C++ Surface创建这个ISurface (BnSurface)并发送命令,如更新surface内容到屏幕上。Server端接受这个命令并执行相应操作。研究一个surface如何创建的关键路径如下1. frameworks/base/core/java/android/view/Surface.java -- Surface::Surface ()2. frameworks/base/core/jni/android_view_Surface.cpp -- Surface_init ()。在这个函数中SurfaceComposerClient 对象被创建。3.frameworks/base/libs/ui/SurfaceComposerClient.cpp -- SurfaceComposerClient::SurfaceComposerClient (). 这个函数非常重要,在这里建立了client和server之间的桥梁。通过函数_get_surface_manager()获得了一个指向server的IBinder 对象(具有ISurfaceComposer接口),之后通过这个IBinder就可以跨进程访问Server的功能。接着调用ISurfaceComposer::createConnection()创建并返回了一个ISurfaceFlingerClient的IBinder。4.frameworks/base/libs/ui/SurfaceComposerClient.cpp -- SurfaceComposerClient::createSurface().这个函数中,利用前面获得的ISurfaceFlingerClient的IBinder,调用其createSurface接口。5.frameworks/base/libs/surfaceflinger/SurfaceFl
您可能关注的文档
- 2013新版八年级下册U1-U3电子备课.doc
- 2013年秋七年级英语上册_Unit_4_Where’s_my_schoolbag_sectionA(1a-1c)课件_(新版)人教新目标版.ppt
- 2014人教版新目标英语八年级下Unit3-Could-you-please-clean-your-room-sectionA-(2d-to3c).ppt
- 2014Unit_4_At_the_farm_Part_A_Let’s_learn.ppt
- 2014届高考英语二轮全面深化专题训练:短文改错5.doc
- 2014年湖北省鄂州市中考英语试题(含答案).doc
- 2015八年级下第一单元Section A-2.ppt
- 2015年华工大学英语一随堂练习答案.doc
- 2016年秋九年级人教版英语教学课件:Unit 9 I like music that I can dance to. (共55张PPT).ppt
- 2016考研英语阅读高频单词13大类下载.doc
文档评论(0)