Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 图层\类型\硬件和图形到缓存_Android_Hardware Acceleration - Fatal编程技术网

Android 图层\类型\硬件和图形到缓存

Android 图层\类型\硬件和图形到缓存,android,hardware-acceleration,Android,Hardware Acceleration,视图可以具有LAYER_TYPE_HARDWARE(view.setLayerType(LAYER_TYPE_HARDWARE,null))的layerType,它告诉视图将缓存绘制到GPU中。我如何知道该缓存的绘制频率?规则是什么?我假设每次视图调用invalidate或onDraw时,LAYER\u TYPE\u硬件必须创建一个新缓存。如果这是真的,那么对于一个经常调用onDraw的视图来说,最好不要使用LAYER_TYPE_硬件,因为这样做的工作量是原来的两倍(因为绘制到一个不被使用的缓存

视图可以具有LAYER_TYPE_HARDWARE(view.setLayerType(LAYER_TYPE_HARDWARE,null))的layerType,它告诉视图将缓存绘制到GPU中。我如何知道该缓存的绘制频率?规则是什么?我假设每次视图调用invalidate或onDraw时,LAYER\u TYPE\u硬件必须创建一个新缓存。如果这是真的,那么对于一个经常调用onDraw的视图来说,最好不要使用LAYER_TYPE_硬件,因为这样做的工作量是原来的两倍(因为绘制到一个不被使用的缓存会增加开销)

无论如何,我看不到我可以记录的钩子,设置开发选项以在GPU上闪烁屏幕也看不到做任何事情

TL:DR,我如何知道何时创建了新的层缓存

我如何知道何时创建新的层缓存

它是在您第一次调用view.setLayerType(LAYER\u TYPE\u HARDWARE,null)时创建的

在幕后,拍摄视图的快照并将其作为纹理上传到GPU

我如何知道该缓存的绘制频率?规则是什么 是吗

如果要更改某些属性,如alpha、视图坐标、缩放或旋转视图,则不会将新纹理上载到GPU。这就是为什么硬件层适用于某些类型的动画,因为您基本上只需将变换矩阵发送到GPU,而无需重新绘制(从而在层的情况下重新加载纹理)

如果更改视图的任何其他属性,则会将一个新纹理上载到GPU,如果在动画中执行此操作,可能会很昂贵

我假设每次视图调用invalidate或onDraw时 层\类型\硬件必须创建新缓存

视情况而定。如前一段所述,如果使用层友好特性(如alpha、x、y、scale和rotate),则无效不会导致重绘。在这种情况下,不会上载新纹理


但是,由于对其他属性的更改而无效将导致纹理上载,并且比仅绘制没有图层的纹理要慢。

从哪里可以获得这些属性的列表,这些属性不会导致重绘?