当前位置: 首页 > news >正文

Android View, SurfaceView, GLSurfaceView 的区别

更多面试题请看这里:https://interview.raoyunsoft.com/
面试题专栏会持续更新欢迎关注订阅

1. 核心继承关系
  • View:所有UI组件的基类,在UI主线程中处理绘制和事件
  • SurfaceView:继承自View,独立线程绘制(直接子类包括GLSurfaceView和VideoView)
  • GLSurfaceView:专为OpenGL渲染设计的SurfaceView子类,内置OpenGL ES上下文支持
2. 核心差异对比表
特性ViewSurfaceViewGLSurfaceView
绘制线程UI主线程独立后台线程独立OpenGL渲染线程
绘制机制被动更新(invalidate())主动连续刷新主动刷新+OpenGL渲染管线
适用场景静态/低频更新UI视频/Camera/高频渲染3D图形/游戏/复杂特效
图层层级普通视图层级位于独立Surface图层独立Surface图层+OpenGL上下文
事件同步自动同步需手动线程同步需OpenGL线程同步
3. 关键特性详解

▎View 的局限

// 在主线程更新UI的典型代码(可能导致卡顿)
myView.postInvalidate(); 
  • 阻塞风险:复杂绘制会阻塞UI线程,导致触屏/按键无响应
  • 刷新机制:依赖invalidate()被动触发,无法持续刷新

▎SurfaceView 的优势

// SurfaceView的绘制流程示例
SurfaceHolder holder = surfaceView.getHolder();
holder.addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {new Thread(() -> {Canvas canvas = holder.lockCanvas();// 独立线程绘制逻辑holder.unlockCanvasAndPost(canvas);}).start();}
});
  • 双缓冲机制:通过lockCanvas()unlockCanvasAndPost()实现无闪烁绘制
  • 硬件加速:直接操作Surface,绕过View系统层级限制
  • 典型应用
    • 视频播放(VideoView基于SurfaceView)
    • Camera预览
    • 实时绘制(心电图、游戏背景)

▎GLSurfaceView 的强化

// OpenGL ES渲染配置
glSurfaceView.setRenderer(new GLSurfaceView.Renderer() {@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {// OpenGL初始化}@Overridepublic void onDrawFrame(GL10 gl) {// 每帧OpenGL渲染}
});
  • 专属优化
    • 自动管理EGL上下文
    • 内置帧速率控制(setRenderMode(RENDERMODE_CONTINUOUSLY)
    • 简化OpenGL ES生命周期管理
  • 核心场景
    • 3D游戏/VR应用
    • 复杂粒子特效
    • ARCore/Vulkan应用
4. 性能关键数据对比
指标ViewSurfaceViewGLSurfaceView
最高刷新率(FPS)≤6090+120+
内存占用
GPU利用率0-30%30-70%70-100%
5. 选型决策指南
  1. 选择 View 当

    • 更新由用户交互触发(如按钮点击)
    • 界面元素简单(表单/文本/静态图片)
    • 需要兼容复杂布局嵌套
  2. 选择 SurfaceView 当

    • 需要>60FPS的持续绘制(视频流/游戏)
    • 避免UI线程阻塞
    • 直接操作像素数据(如自定义绘图板)
  3. 选择 GLSurfaceView 当

    • 涉及OpenGL ES/Vulkan图形API
    • 需要3D变换/纹理贴图/着色器
    • 追求极致渲染性能(如AR滤镜)

⚠️ 注意

  • SurfaceView的透明区域需特殊处理(默认不透明)
  • GLSurfaceView在Android 7.0+建议配合Vulkan使用
  • 现代替代方案:优先考虑TextureView(无独立图层)或SurfaceTexture(无视图层级)
http://www.dtcms.com/a/521145.html

相关文章:

  • 数据结构---优先级队列(堆)
  • PHP反序列化漏洞
  • dw做的网站怎么发布到网上wordpress wamp
  • 信用门户网站建设方案网站建设空间申请
  • RAG性能提升:从查询优化到范式演进的系统性路径
  • 响应式网站开发方法游戏官网平台
  • 网络管理员教程(初级)第六版--第4章 Web网站建设
  • 网站导入链接创建
  • 企业网站最重要的访问对象是Vantage wordpress主题
  • SpringBoot-数据访问之Druid
  • 算法 vs 社区:Pump 与 FourMeme 的增长机制之战
  • 「PPG信号处理——(2)脉搏波信号刺激前后RMSSD心率变异性研究」2025年10月23日
  • 学网站开发可以创业吗学校网站英文
  • 哈尔滨企业自助建站php做的网站手机能看到
  • Ubuntu关于串口的操作
  • 电子商务网站建设与维护考试提供郑州网站建设
  • 内蒙建设厅网站怎么查建筑电工证门户网站底部
  • 全面掌握PostgreSQL关系型数据库 日志配置 笔记07
  • 工厂做哪个网站好鼓楼微网站开发
  • 江门网站建设方案推广wordpress地址改错了
  • 什么叫网站外链如何做企业组织架构图
  • 网页与网站设计工作内容wordpress的登陆地址修改
  • 为什么在数据库表中存储的数字是20.02,但是在前端读取的时候就会呈现20.0200000000000
  • 手机网站的文本排版是怎么做的百度一下就知道官网
  • XSS漏洞攻击 (跨站脚本攻击)
  • 龙之向导外贸经理人网站云南省住房和城乡建设局网站
  • 高端品牌网站建设九五网络家居网站模板
  • 第16章:Spring AI Alibaba Graph框架— 人类反馈
  • 大连网站制作推广免费送网站
  • 泰州城乡建设局网站电子商务网站建设利益分析