android - Galaxy Nexus 上出现奇怪的内存泄漏。是否存在已知问题?

标签 android memory-management memory-leaks galaxy

我在 Galaxy Nexus 上遇到了一个用户使用我的应用程序的问题。这是一款图形密集型游戏,本质上是当他从一个 Activity 切换到另一个 Activity 时,内存逐渐耗尽。

这是一款 Galaxy Nexus(据我所知)搭载 Android 4.0.2。 LogCat 摘录:

D/.GameViewActivity( 3203): debug. =================================
D/.GameViewActivity( 3203): debug.heap native: allocated 6.01MB of 8.95MB (0.04MB free) in [.GameViewActivity]
D/.GameViewActivity( 3203): debug.memory: allocated: 54.00MB of 64.00MB (14.00MB free)
D/dalvikvm( 3203): GC_EXPLICIT freed 366K, 28% free 40426K/55623K, paused 4ms+4ms
D/dalvikvm( 3203): GC_EXPLICIT freed 1K, 28% free 40425K/55623K, paused 1ms+4ms

片刻之后(大约几分钟),它将看起来像这样:

D/.MainActivity( 3203): debug. =================================
D/.MainActivity( 3203): debug.heap native: allocated 6.92MB of 11.36MB (0.18MB free) in [.MainActivity]
D/.MainActivity( 3203): debug.memory: allocated: 58.00MB of 64.00MB (1.00MB free)
D/dalvikvm( 3203): GC_EXPLICIT freed 297K, 4% free 58119K/60359K, paused 1ms+5ms
D/dalvikvm( 3203): GC_EXPLICIT freed 3K, 4% free 58116K/60359K, paused 1ms+5ms
I/WindowManager(17943): createSurface Window{41fadf88 .MainActivity paused=false}: DRAW NOW PENDING
D/OpenGLRenderer( 3203): Flushing caches (mode 0)
I/ActivityManager(17943): Displayed .MainActivity: +556ms (total +743ms)
D/dalvikvm(17943): GC_FOR_ALLOC freed 823K, 14% free 24118K/27911K, paused 86ms
D/.GameViewActivity( 3203): debug. =================================
D/.GameViewActivity( 3203): debug.heap native: allocated 6.95MB of 11.36MB (0.15MB free) in [.GameViewActivity]
D/.GameViewActivity( 3203): debug.memory: allocated: 58.00MB of 64.00MB (1.00MB free)
D/dalvikvm( 3203): GC_EXPLICIT freed 11K, 4% free 58488K/60359K, paused 2ms+5ms
D/dalvikvm( 3203): GC_EXPLICIT freed <1K, 4% free 58487K/60359K, paused 2ms+4ms

随后发生崩溃和内存不足。

现在,我已经习惯了 Android 无可救药的内存管理系统,导致我的游戏不可避免地崩溃(这是 - 到目前为止 - Android 仪表板中报告最多的错误,无论我如何严格地切除内存都无关紧要在应用程序中 - 图形 + Android 内存管理 = 强制关闭)。我只使用 Android 组件 + SurfaceView,尽管使用自定义图形进行了大量的皮肤/样式设置。

然而,引起我注意的奇怪的事情是电话。

现在 - 首先 - 它是 Galaxy Nexus,因此几乎是目前最先进的手机,为其应用程序提供了最多的可用内存。奇怪的是,在所有的手机中,这部手机竟然有这种问题。

其次,我有完全相同的手机 - 也运行 4.0.2 - 我将它用作我的主要测试手机。我的用户可以让游戏在几分钟内崩溃;当我玩这个游戏时,它可以运行几个小时,并且始终有 20-25Mb 的可用内存。

第三,这个应用程序每天在数万部手机上运行,​​所以我 100% 确定该应用程序不会有任何问题会导致我的用户遇到的这种灾难性内存泄漏看见。

简而言之 - 我完全被难住了。

有什么想法吗?这里有没有人见过这样的事情? Galaxy Nexus 是否存在我未听说过的已知问题?我可能会问这个用户的任何策略/问题/测试可能有助于确定这里的问题?

最佳答案

如果用户有一些经验,也许他可以向您转储内存配置文件,以便您可以查看分配情况。

参见 http://android-developers.blogspot.de/2011/03/memory-analysis-for-android.html一些说明。

您还可以尝试使用 Debug#dumpHprofData() 从您的应用中转储内存配置文件。并要求用户将该文件发送给您。

关于android - Galaxy Nexus 上出现奇怪的内存泄漏。是否存在已知问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287534/

相关文章:

objective-c - Cocoa内存管理,为什么我的应用程序不断使用更多?

java - 为什么这个 int 比较失败?

c - 获取流程段的开始和结束 C/C++

javascript - 内存泄漏和 jQuery 插件

c - txm_module_object_allocate((void**)obj_ptr, sizeof(obj)) 如何工作?

C#:释放内存使用

java - 如何查找由java代码引起的 native 内存泄漏?

android - 为什么我无法从我的 Android 设备连接到 IISExpress?

android - 如何在 fragment 的编辑文本中保存输入值?

android - ICS 中的小部件尺寸