建议Android开发人员减少应用程序中的透支。
https://developer.android.com/topic/performance/rendering/overdraw.html
iOS开发者被警告透支,但没有强调。相反,它们可以选择为混合层着色。
https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/MeasuringGraphicsPerformance.html
根据我在iOS上的理解,CoreGraphics将层放入GPU中,GPU在渲染时将它们组合在一起。当像素未混合(alpha通道)时,计算要显示的像素更容易。
导致安卓专注于透支的技术差异是什么?你能提供一个技术参考吗?
我想这主要是由于Painter算法和Z-Buffering之间的差异。
使用前者,可以根据布局从后到后绘制每个视图,并根据需要透支像素。这可能会导致相当多的浪费,因为无论像素是否被遮挡,都需要对其进行渲染。
Z-Buffering可以通过使用Z-Culling来改进这一点,如果层排序正确,可以尽早消除一些像素。
最初,Android使用的是完全基于软件的渲染堆栈,因此Z-Buffering不可用,据我所知,使用了一个简单的Painter's Algorithm。iOS始终基于硬件加速渲染,因此可以利用Z-Buffering(一些)优势。但从安卓3.0开始,安卓也开始实现基于硬件的渲染。
然而,在实践中事情并不是那么简单。首先,使用硬件层和进行深度排序也会产生一些成本,如果像移动应用程序那样处理非常简单的绘图操作(比如简单地绘制位图,而不是3D图形中复杂的基于像素的闪电操作),那么透支像素实际上可能比避免它更便宜。在处理透明度时,事情显然也会变得复杂得多。
我认为Android和iOS都使用了多种技术,因此Overdrive很可能会在这两个平台上出现。在任何情况下,通过避免不必要的重叠来完全避免问题都是一个好主意。
iOS开发者确实被指示避免透支:
当您的应用程序或其内容不可见时,消除绘图;例如,当你的应用程序在后台时,或者当它的内容被其他视图遮挡、剪辑或屏幕外时。
来自您提到的链接。