我这里有一个应用程序,它具有在地图上显示POI的功能.它只是一个POI,只有当它实际位于可见屏幕区域内时才会被绘制.它可以完美地工作一段时间,但如果我在放大和缩小和拖动时玩,它最终会崩溃.根据Logcat,原因始终是OutOfMemory错误.
起初,我认为这是Google Maps API上的一个错误.经过一些研究和看到一些Romain Guy的帖子,我有点确信我在我的应用程序上做了一些愚蠢的事情让我不时耗尽内存.然后我用Heap Analyzer(Eclipse)运行了一些更详细的测试,我看到即使我有2+,有时还剩3+兆字节的可用内存,我仍然得到由OutOfMemoryError引起的恼人的Force Close消息.大多数时候,无论我剩下多少,它都会在尝试分配大约614kb的内存时崩溃.
这个问题在Nexus One 2.2.1和HTC Evo 2.1上发生了很多.经过一些小小的测试,我在G1 1.6和三星Galaxy S i9000 2.1上都没有崩溃.但我不能肯定地说G1和Galaxy在经过更多测试后不会出现这个问题.
我只能想到内存碎片问题.我希望这个问题有一个解决方案.如果我能抓住这个错误并阻止应用程序崩溃,我也会很高兴.
如果它有帮助,这里是logcat:
09-29 08:58:06.661: ERROR/dalvikvm-heap(1552): 648000-byte external allocation too large for this process.
09-29 08:58:06.661: ERROR/dalvikvm(1552): Out of memory: Heap Size=9991KB, Allocated=6980KB, Bitmap Size=14510KB
09-29 08:58:06.661: ERROR/(1552): VM won't let us allocate 648000 bytes
09-29 08:58:06.672: DEBUG/AndroidRuntime(1552): Shutting down VM
09-29 08:58:06.672: WARN/dalvikvm(1552): threadid=3: thread exiting with uncaught exception (group=0x4001b390)
09-29 08:58:06.672: ERROR/AndroidRuntime(1552): Uncaught handler: thread main exiting due to uncaught exception
09-29 08:58:06.681: …Run Code Online (Sandbox Code Playgroud) 我在使用Google地图运行应用时在我的logcat中收到此警告:
chunk is too big to transmit (length=49398928, 48259 bytes)
我认为它与内存碎片有关,但我希望有人可以确认,提供解释和/或解决方案?它在内存不足错误之前开始发生.