弃用 Android 个绘图缓存 API

Deprecated Android drawing cache APIs

我正在浏览 Android 文档,关于已弃用的绘图缓存 API's.We 在我们的代码库中广泛使用了绘图缓存 API。我们将它用于位图和视图的快照。

https://developer.android.com/reference/android/view/View#setDrawingCacheEnabled(boolean).

我的疑惑主要集中在文档中提到的几点。

Doc 说:“对于一小部分视图层次结构或单个视图的软件渲染快照,建议使用 Canvas 方法”

  1. 这里的“软件渲染快照”是什么意思?

  2. 默认情况下,从 Android 4.0 开始使用硬件加速。因此,所有附加到 window 的视图都会将 isHardwareacclerated() 设置为 true。 “软件渲染的快照”是指我们已禁用硬件加速的所有视图吗?

Doc 还说:但是,不鼓励使用这些软件渲染的用法,并且与 Config.HARDWARE 位图、实时阴影和轮廓剪裁等纯硬件渲染功能存在兼容性问题。对于用于反馈报告或单元测试的 UI 的屏幕截图,建议使用 PixelCopy API。

  1. 这是否意味着,我们必须使用 PixelCopy APIs 而不是 canvas 方法?

  2. 据我了解,SurfaceView 应该使用 PixelCopy APIs。这是错误的吗?对所有视图使用 PixelCopy APIs 是正确的方法吗?

注意:如果理解有误请指正

在浏览 Android 文档并处理与上述查询相关的示例后,我找到了我的查询的答案。

  1. 这里的“软件渲染快照”是什么意思?

回答:如果您的目标 API 级别 >=14,则默认启用硬件加速。这里的 Views canvas 使用 GPU 进行绘图。如果我们在代码中创建 canvas 对象,它会将 isHardwareAccelerated() 设置为 false,这表示绘制将由 CPU 执行。所以“软件渲染快照”的意思是,通过 CPU.

渲染的对象

https://developer.android.com/guide/topics/graphics/hardware-accel

  1. 默认情况下,从 Android 4.0 开始使用硬件加速。因此,所有附加到 window 的视图都会将 isHardwareacclerated() 设置为 true。 “软件渲染的快照”是指我们禁用硬件加速的所有视图吗?

Ans:所有绘图都是通过 canvas 在代码中创建的对象发生的。

3.Does这个意思是,我们要用PixelCopyAPIs代替canvas的方法? 4.根据我的理解,PixelCopy APIs应该用于SurfaceView。这是错误的吗?对所有视图使用 PixelCopy APIs 是正确的方法吗?

回答:必须在 SurfaceView 和 Window 对象上使用 PixelCopy APIs。我们不能对所有视图使用 PixelCopy APIs

https://developer.android.com/reference/android/view/PixelCopy