Android中SurfaceView的最大大小是多少?

时间:2014-01-06 16:54:49

标签: android surfaceview

我在SurfaceView

时遇到以下错误
01-06 18:48:31.947: E/SurfaceFlinger(180): dimensions too large 5700 x 1506

我完全理解这是非常大SurfaceView我应该做更多的重构,以便将我的自定义View更改为SurfaceView

但我很好奇为什么它太大,Android无法分配SurfaceView?它不能忽略在视口中看不到的图纸吗?我怎么知道可以使用的SurfaceView的最大大小是多少?最大尺寸之间是否存在差异?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为错误来自SurfaceFlinger的低级本机代码。

https://android.googlesource.com/platform/frameworks/native/+/android-4.4.2_r1/services/surfaceflinger/Layer.cpp

uint32_t const maxSurfaceDims = min(
        mFlinger->getMaxTextureSize(), mFlinger->getMaxViewportDims());

// never allow a surface larger than what our underlying GL implementation
// can handle.
if ((uint32_t(w)>maxSurfaceDims) || (uint32_t(h)>maxSurfaceDims)) {
    ALOGE("dimensions too large %u x %u", uint32_t(w), uint32_t(h));
    return BAD_VALUE;
}

简而言之,您尝试分配的纹理/视口大于OpenGL驱动程序/ GPU的配置。您已经知道请求太大了。由于尺寸取决于设备/制造商,我不确定您是否可以获得可以跨越多个Android供应商的确定价值。

您可能还想查看Jelly Bean中的内容,以改善Google IO 2012会话中涵盖的UI性能:For Butter or Worse: Smooth Out Performance in Android UIs,它可以让您高度了解图形引擎尝试的内容做。