为什么文档建议您减少Android设备上的透支?

为什么文档建议您减少Android设备上的透支?,android,ios,performance,Android,Ios,Performance,建议Android开发者减少应用程序的透支 iOS开发者被警告要小心透支,但没有被强调。相反,它们可以选择为混合层着色 据我对iOS CoreGraphics的了解,CoreGraphics将层放入GPU,GPU在渲染时将层合并。当像素未混合(alpha通道)时,计算要显示的像素更容易 什么是导致Android专注于overdraw的技术差异?您能提供一份技术参考吗?确实要求iOS开发者避免透支: 在应用程序或其内容不可见时消除绘图;例如,当您的应用程序位于后台,或其内容被其他视图、剪辑或屏

建议Android开发者减少应用程序的透支

iOS开发者被警告要小心透支,但没有被强调。相反,它们可以选择为混合层着色

据我对iOS CoreGraphics的了解,CoreGraphics将层放入GPU,GPU在渲染时将层合并。当像素未混合(alpha通道)时,计算要显示的像素更容易


什么是导致Android专注于overdraw的技术差异?您能提供一份技术参考吗?

确实要求iOS开发者避免透支:

在应用程序或其内容不可见时消除绘图;例如,当您的应用程序位于后台,或其内容被其他视图、剪辑或屏幕外遮挡时


从你提到的链接来看。

我想这主要是由于和之间的差异

使用前者,您可以根据布局从后向前绘制每个视图,并根据需要过度绘制像素。这可能会导致相当多的浪费,因为无论像素是否被遮挡,都需要对其进行渲染

Z缓冲可以通过使用Z消隐(Z-Culling)来改善这一点,如果图层排序正确,可以提前消除一些像素

最初,Android使用完全基于软件的渲染堆栈,因此Z缓冲不可用,据我所知,使用了一种简单的Painter算法。iOS始终基于硬件加速渲染,因此可以(部分)利用Z缓冲。但自从安卓3.0以来,安卓也开始实施基于硬件的渲染

但在实践中事情并不是那么简单。首先,使用硬件层和进行深度排序也会带来一些成本,如果像移动应用程序那样处理非常简单的绘图操作(比如简单地绘制位图,而不是使用3D图形进行复杂的基于像素的闪电操作),那么过度绘制像素实际上可能比试图避免这样做更便宜。在处理透明胶片时,事情显然也变得复杂得多


我假设Android和iOS都使用了多种技术,所以在这两种平台上最有可能出现透支。在任何情况下,通过避免不必要的重叠来完全避免问题都是一个好主意。

但重点仍然不同。据我所知,一旦定义了层,CoreGraphics在将层组合在一起时非常有效,而Android文档似乎对逐像素绘制效率更感兴趣。我希望得到更多的细节,了解导致这一问题的幕后差异。看起来苹果公司正在实施他们自己的“解决方案”,而在安卓系统中,他们什么也不做,让你控制如何克服这个问题。你想了解有关CoreGraphics操作的一些细节吗?阅读这篇老文章可能会有所帮助:“我假设Android和iOS都使用了多种技术,所以Overdraw很可能会在这两种平台上出现。”如果能得到比这更具体的答案,那就太好了,但这可能很困难,因为软件/硬件实现可能会随着新版本的变化而变化。