【问题标题】:Is this a MapView Bug?这是 MapView 错误吗?
【发布时间】:2012-03-18 02:41:14
【问题描述】:

我正在实施一个使用 Google 地图的应用。在调试过程中,我发现了一个有趣的错误,您可以轻松重现(我希望如此)。如果您测试 Google 的 Hello MapView 示例:

http://developer.android.com/guide/tutorials/views/hello-mapview.html

错误: 如果你快速向任意方向滑动(尝试对角方向),一段时间后,你可能会得到如下错误:

02-28 15:59:45.138: D/dalvikvm(26484): GC_CONCURRENT freed 2K, 13% free 18870K/21639K,      paused 2ms+4ms
02-28 15:59:45.911: D/dalvikvm(26484): GC_FOR_ALLOC freed 1603K, 20% free 17396K/21639K, paused 14ms
02-28 15:59:45.911: I/dalvikvm-heap(26484): Grow heap (frag case) to 18.546MB for 1560976-byte allocation
02-28 15:59:45.942: D/dalvikvm(26484): GC_CONCURRENT freed 1K, 13% free 18919K/21639K, paused 2ms+2ms
02-28 15:59:54.271: D/dalvikvm(26484): GC_CONCURRENT freed 2794K, 19% free 17649K/21639K, paused 2ms+2ms
02-28 15:59:58.497: D/dalvikvm(26484): GC_CONCURRENT freed 856K, 18% free 17880K/21639K, paused 5ms+3ms
02-28 16:00:04.341: D/dalvikvm(26484): GC_CONCURRENT freed 1003K, 17% free 18063K/21639K, paused 4ms+4ms
02-28 16:00:11.083: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072
02-28 16:00:11.091: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072
02-28 16:00:11.614: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072
02-28 16:00:11.614: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072
02-28 16:00:11.638: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072
02-28 16:00:11.646: D/dalvikvm(26484): GC_CONCURRENT freed 1097K, 16% free 18222K/21639K, paused 2ms+6ms
02-28 16:00:11.646: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072
02-28 16:00:11.646: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072

地图崩溃。知道如何解决这个问题吗?

【问题讨论】:

  • 我在 Galaxy S2 智能手机和 Galaxy Nexus 上测试了这个示例
  • 但我想这不是您的代码的真正问题。没有错误,只有调试和信息消息。这会以某种方式影响您的代码和用户体验吗?
  • 问题是当您在地图上(快速)滑动手指时,地图会崩溃。崩溃后地图不再可用。当地图崩溃时,我收到以下消息“imageref_ashmem create failed”(如上所示)。我认为有一些记忆问题。该代码是我上面发送的链接中的示例代码。谁能重现这种行为?
  • 我今天试过了,但应用程序没有崩溃。我应该做多久? Ashmem 是负责内存共享的 Android 内核驱动程序。
  • 如果你这样做了大约两分钟,它应该会崩溃。尝试快速对角滑动。谢谢!

标签: android google-maps-api-3 android-mapview


【解决方案1】:

在许多情况下,使用 MapView 的间歇性崩溃行为可以通过确保您在应用程序清单的“应用程序”元素中指定使用 largeHeap 来解决,尤其是在大屏幕设备(平板电脑)上。此属性从 API 级别 11 (Android 3.0) 开始可用。

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.ge.android.app"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />

    <application android:icon="@drawable/app" android:label="@string/app_name"
                 android:debuggable="true"
                 android:theme="@style/CustomTheme"
                 android:largeHeap="true">
    ...
    </application>
   ...
</manifest>

另请参阅:Android Developer Guide - Android Manifest

【讨论】:

    【解决方案2】:

    Think Google Maps 与 OutOfMemoryError 崩溃我在 HTC Wildfire 上发现了几次。它可以在堆内存较小的设备上轻松复制。当您快速滑动(调整大小)时,您将超过所有堆。认为垃圾收集器在某些情况下无法如此快速地释放内存,而您会遇到内存不足的情况。

    【讨论】:

    • 除了使用 largeHeap="true" 还能有什么解决办法?
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多