android.view.Surface-OutOfResourcesException

android.view.Surface-OutOfResourcesException,android,exception,canvas,resources,surfaceview,Android,Exception,Canvas,Resources,Surfaceview,我有一个奇怪的bug,但没有找到任何可能的解决方案。使用我的应用程序玩了一会儿后,问题总是随机出现。该应用程序在几乎所有设备上都能完美运行。仍然存在此问题的设备之一是运行CM7.1.0,我知道很多CM7用户都在抱怨类似的问题 不幸的是,我有一些用户与应用程序有相同的问题,但我不知道他们是否在使用CM7。由于我无法在同一个ROM上的其他应用程序中重现此错误,因此它一定与其他内容有关 正如我之前所说的,它看起来完全是随机的,所以复制源代码没有任何意义。这里是日志,希望有人已经有同样的问题,可以帮助我

我有一个奇怪的bug,但没有找到任何可能的解决方案。使用我的应用程序玩了一会儿后,问题总是随机出现。该应用程序在几乎所有设备上都能完美运行。仍然存在此问题的设备之一是运行CM7.1.0,我知道很多CM7用户都在抱怨类似的问题

不幸的是,我有一些用户与应用程序有相同的问题,但我不知道他们是否在使用CM7。由于我无法在同一个ROM上的其他应用程序中重现此错误,因此它一定与其他内容有关

正如我之前所说的,它看起来完全是随机的,所以复制源代码没有任何意义。这里是日志,希望有人已经有同样的问题,可以帮助我。谢谢

msm7k.gralloc(1306): alloc mmap(fd=150, size=614400, prot=3) failed (Try again)
msm7k.gralloc(1306): gralloc failed err=Try again
GraphicBufferAllocator(1306): alloc(320, 480, 1, 00000033, ...) failed -11 (Try again)
GraphicBufferAllocator(1306): Allocated buffers:
GraphicBufferAllocator(1306):   0x20a8d0:  300.00 KiB |  320 ( 320) x  480 |  4 | 0x00000133
GraphicBufferAllocator(1306):   0x20c110:  531.25 KiB |  320 ( 320) x  425 |  1 | 0x00000133
GraphicBufferAllocator(1306):   0x292db0:   31.25 KiB |  320 ( 320) x   25 |  1 | 0x00000133
GraphicBufferAllocator(1306):   0x299568:  300.00 KiB |  320 ( 320) x  480 |  4 | 0x00000133
GraphicBufferAllocator(1306):   0x4a2288:  331.25 KiB |  320 ( 320) x  265 |  1 | 0x00000133
GraphicBufferAllocator(1306):   0x4b2518:   31.25 KiB |  320 ( 320) x   25 |  1 | 0x00000133
GraphicBufferAllocator(1306): Total allocated: 1525.00 KB
SurfaceFlinger(1306): Layer::requestBuffer(this=0x3a7618), index=0, w=320, h=480 failed (Try again)
Surface(7024): Surface (identity=224) requestBuffer(0, 0, 0, 0, 00000033) returned a buffer with a null handle
Surface(7024): getBufferLocked(0, 0, 0, 0, 00000033) failed (Out of memory)
Surface(7024): dequeueBuffer failed (Out of memory)
ViewRoot(7024): OutOfResourcesException locking surface
ViewRoot(7024): android.view.Surface$OutOfResourcesException
ViewRoot(7024):     at android.view.Surface.lockCanvasNative(Native Method)
ViewRoot(7024):     at android.view.Surface.lockCanvas(Surface.java:314)
ViewRoot(7024):     at android.view.ViewRoot.draw(ViewRoot.java:1461)
ViewRoot(7024):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1263)
ViewRoot(7024):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
ViewRoot(7024):     at android.os.Handler.dispatchMessage(Handler.java:99)
ViewRoot(7024):     at android.os.Looper.loop(Looper.java:130)
ViewRoot(7024):     at android.app.ActivityThread.main(ActivityThread.java:3835)
ViewRoot(7024):     at java.lang.reflect.Method.invokeNative(Native Method)
ViewRoot(7024):     at java.lang.reflect.Method.invoke(Method.java:507)
ViewRoot(7024):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
ViewRoot(7024):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
ViewRoot(7024):     at dalvik.system.NativeStart.main(Native Method)

如果不再使用
android.view.Surface
,则需要调用
release()


()

经过长时间的git提交,我终于找到了一个没有这个问题的git提交。由于我正在使用的应用程序在屏幕上显示敏感数据,所以我试图更改“最近的应用程序”部分中显示为缩略图的图像。为了实现这一点,我将安全标志设置到窗口:

,int)


原来是这个问题导致了异常和显示的黑屏。我把它取下来后,一切都很好。希望本技巧能帮助其他面临相同问题的开发人员。

我也有类似的问题,但与硬件表面有关

我有ProgressDialog和SignIn组件。 此组件之间的所有通信都是通过处理程序类完成的


在我的例子中,从崩溃中拯救出来的唯一一件事就是关闭特定活动的硬件加速。

好的,希望这能让事情变得更清楚。曲面是包含正在合成到屏幕的像素的对象。您在屏幕上看到的每个窗口都有其自己的绘制到的曲面,曲面Flinger将这些曲面以正确的Z顺序渲染到最终显示。一个曲面通常有两个以上的缓冲区来进行双缓冲渲染:当surface flinger使用最后一个缓冲区合成屏幕时,应用程序可以绘制其下一个UI状态,而无需等待。=>所以这是安卓操作系统本身处理的事情,而不是在应用程序中。@LeviKurti也许你想在这里继续读下去,那么:谢谢你的链接,Michael,但不幸的是,我已经读了十几篇CM和Google发布的文章,包括这篇,但没有运气。我甚至发现2012年5月底的帖子都没有修复。似乎其他开发人员也被困在这个无休止的循环中。