【问题标题】:Android GraphicBufferAlloc::createGraphicBuffer(w=1232, h=800) failed (Out of memory)Android GraphicBufferAlloc::createGraphicBuffer(w=1232, h=800) 失败(内存不足)
【发布时间】:2014-07-05 16:19:06
【问题描述】:

我在通过 api 调用更新某些字段后重新启动活动,在 10-15 次连续更新后,它给出了如下异常:

05-06 17:12:55.412: E/SurfaceFlinger(115): GraphicBufferAlloc::createGraphicBuffer(w=1232, h=800) failed (Out of memory), handle=0x0
05-06 17:12:55.412: E/BufferQueue(115): [com.ht.coremoney/com.ht.coremoney.cards.TransactionFullDetailActivity] dequeueBuffer: SurfaceComposer::createGraphicBuffer failed
05-06 17:12:55.420: E/libEGL(1350): eglMakeCurrent:534 error 3003 (EGL_BAD_ALLOC)
05-06 17:12:55.428: E/ViewRootImpl(1350): OutOfResourcesException initializing HW surface
05-06 17:12:55.428: E/ViewRootImpl(1350): android.view.Surface$OutOfResourcesException: eglMakeCurrent failed EGL_BAD_ALLOC
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.HardwareRenderer$GlRenderer.createEglSurface(HardwareRenderer.java:920)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.HardwareRenderer$GlRenderer.initialize(HardwareRenderer.java:748)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1621)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4464)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.Choreographer.doCallbacks(Choreographer.java:555)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.Choreographer.doFrame(Choreographer.java:525)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.os.Handler.handleCallback(Handler.java:615)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.os.Handler.dispatchMessage(Handler.java:92)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.os.Looper.loop(Looper.java:137)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at android.app.ActivityThread.main(ActivityThread.java:4895)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at java.lang.reflect.Method.invokeNative(Native Method)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at java.lang.reflect.Method.invoke(Method.java:511)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
05-06 17:12:55.428: E/ViewRootImpl(1350):   at dalvik.system.NativeStart.main(Native Method)
05-06 17:12:55.428: E/android.os.Debug(1350): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_surfaceoom

请给我建议解决方案。

【问题讨论】:

    标签: android


    【解决方案1】:

    让我们了解java中的异常和错误。

    在你的情况下,你做错了你无法处理或管理的错误,就像异常一样,

    这意味着您需要分析您的应用程序的内存管理..

    通过使用 eclipse Memory Analyzer 工具。 它已插入 Android ADT。

    这里是使用内存的链接 分析器。

    http://www.vogella.com/tutorials/EclipseMemoryAnalyzer/article.html

    http://android-developers.blogspot.in/2011/03/memory-analysis-for-android.html?m=1

    我知道这不是您的直接解决方案,但借助此工具,您可以分析所有内存泄漏并尝试重用您预先分配的缓冲区,

    Android 也建议不要在单一布局中使用非常复杂的布局或在单一布局中使用大量嵌套布局,而不是所有这些,您可以将所有复杂布局分解为 sm 片段。

    希望这些信息对您有所帮助。

    【讨论】:

      【解决方案2】:

      让我们分析一下这是什么意思:

      GraphicBufferAlloc::createGraphicBuffer(w=1232, h=800) failed (Out of memory)
      

      您似乎分配了一个本机缓冲区,985600 像素。如果他们使用 32 位颜色格式,那就是 3.94 MB 内存。考虑到您这样做 10 到 15 次,您最多可以分配 59.14 MB 内存,far too much for most devices

      我的猜测是您忘记实际释放这些缓冲区,因此浪费了大量内存。 使用本机代码时,只有在进程被终止时才会释放内存,而不是在重新启动活动时释放。因此,每次启动活动时,您的代码都会分配一个新缓冲区。您应该在活动关闭时释放或重用已分配的缓冲区。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        • 2011-06-26
        • 2016-01-22
        • 1970-01-01
        • 2020-06-25
        • 2018-07-15
        • 2018-02-05
        相关资源
        最近更新 更多