HARDWARE 属性的Bitmap与普通Bitmap,GPU与RenderThread渲染与处理方式异同比较,Android

HARDWARE 属性的Bitmap与普通Bitmap,GPU与RenderThread渲染与处理方式异同比较,Android

在 Android 中,当 Bitmap 属性配置为 HARDWARE 时,它将存储在 GPU 维护的内存中。

Hardware Bitmap 的存放位置

Hardware Bitmap 使用 Android 的 ‌GraphicBuffer‌ 机制,其像素数据直接存储在 GPU 可访问的内存中(通常是显存或共享内存),而不是传统的 Java 堆或 Native 堆。这种设计带来了显著的性能优势:

零拷贝渲染‌:纹理数据无需从 CPU 内存复制到 GPU。

内存效率‌:避免在 CPU 和 GPU 内存中同时存储相同数据。

渲染优化‌:直接作为 OpenGL ES 纹理使用。

RenderThread渲染线程对于HARDWARE属性的Bitmap不同处理方式

Hardware属性的Bitmap 的处理:

直接纹理上传‌:RenderThread 直接将 Hardware Bitmap 作为纹理绑定到 GPU,无需数据拷贝。

异步解码‌:图像解码可在 RenderThread 上异步执行。

合成优化‌:在视图合成时,Hardware Bitmap 可与其他硬件层直接合成。

减少同步‌:避免了 CPU-GPU 之间的内存同步操作。

普通 Bitmap 的处理:

内存拷贝‌:RenderThread 需要将Bitmap的像素数据从 CPU 内存上传到 GPU 纹理。

同步开销‌:可能需要在 UI 线程和 RenderThread 之间进行内存同步。

解码阻塞‌:图像解码通常在 UI 线程或异步线程执行。

内存占用‌:相同Bitmap图像在 CPU 和 GPU 内存中各存1份。

性能影响对比

特性 Hardware Bitmap 普通 Bitmap

内存使用 仅 GPU 内存 CPU + GPU 内存

渲染性能 高(零拷贝) 中(需要上传)

UI 线程负载 低 高 (如果在UI线程直接解码)

HARDWARE属性的Bitmap兼容性

Android8/API 26+以上

HARDWARE属性的Bitmap使用建议

Hardware Bitmap 特别适合:

大量图像显示的列表、网格

频繁更新的图像内容

内存敏感的应用场景

但需要特别注意

API 级别限制(Android 8.0+)。

某些图像操作,如 Canvas 绘制可能不支持Hardware Bitmap。

某些芯片厂商对于Hardware的Bitmap在GPU中处理的方式并不是高的性能。

相关:

https://blog.csdn.net/zhangphil/article/details/148003427

相关推荐
阿巴斯甜4 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker5 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95276 小时前
Andorid Google 登录接入文档
android
黄林晴7 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab19 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android