带有 10 个标记的 Android 基本 API v2 MapActivity outOfMemory

Posted

技术标签:

【中文标题】带有 10 个标记的 Android 基本 API v2 MapActivity outOfMemory【英文标题】:Android basic API v2 MapActivity outOfMemory with 10 markers 【发布时间】:2012-12-20 18:39:52 【问题描述】:

我正在尝试使用带有 android 支持库的 Android Maps API v2 来实现地图,在带有 Android 2.2 的 Droid2 上进行测试 一切都运行良好,但只是在很短的时间内。一旦我添加了 10 个标记并尝试移动地图或放大/缩小,每秒都会引发以下错误,从而导致可怕的异常和崩溃。 我在后台什么也没做。实际上只有地图和 10 个标记。

感谢您的任何提示。

马丁

错误:

01-07 03:03:23.221: DEBUG/dalvikvm(12914): GC_FOR_MALLOC freed 38714 objects / 1797752 bytes in 74ms
01-07 03:03:23.378: ERROR/dalvikvm-heap(12914): 1048576-byte external allocation too large for this process.
01-07 03:03:23.378: ERROR/GraphicsJNI(12914): VM won't let us allocate 1048576 bytes
01-07 03:03:23.378: WARN/System.err(12914): OutOfMemory
01-07 03:03:23.432: DEBUG/dalvikvm(12914): GC_EXPLICIT freed 8793 objects / 601896 bytes in 58ms
01-07 03:03:23.862: ERROR/dalvikvm-heap(12914): 1048576-byte external allocation too large for this process.
01-07 03:03:23.862: ERROR/GraphicsJNI(12914): VM won't let us allocate 1048576 bytes
01-07 03:03:23.870: WARN/System.err(12914): OutOfMemory

例外:

01-07 02:45:12.432: ERROR/dalvikvm-heap(12315): 1048576-byte external allocation too     large for this process.
01-07 02:45:12.432: ERROR/GraphicsJNI(12315): VM won't let us allocate 1048576 bytes
01-07 02:45:12.464: WARN/dalvikvm(12315): threadid=17: thread exiting with uncaught exception (group=0x400208b0)
01-07 02:45:12.479: ERROR/AndroidRuntime(12315): FATAL EXCEPTION: GLThread 18
    java.lang.OutOfMemoryError: bitmap size exceeds VM budget
    at android.graphics.Bitmap.nativeCreate(Native Method)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:498)
    at maps.r.h.a(Unknown Source)
    at maps.cp.a.a(Unknown Source)
    at maps.cp.a.a(Unknown Source)
    at maps.cp.a.b(Unknown Source)
    at maps.m.n.a(Unknown Source)
    at maps.m.at.a(Unknown Source)
    at maps.a.bq.a(Unknown Source)
    at maps.a.w.a(Unknown Source)
    at maps.a.w.a(Unknown Source)
    at maps.a.w.a(Unknown Source)
    at maps.a.ba.m(Unknown Source)
    at maps.a.ba.run(Unknown Source)

布局:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:map="http://schemas.android.com/apk/res-auto"
      class="com.google.android.gms.maps.SupportMapFragment"
      android:id="@+id/map"
      android:layout_
      android:layout_
      map:cameraTargetLat="49.85"
      map:cameraTargetLng="15.42"
      map:mapType="normal"
      map:uiCompass="true"
      map:uiRotateGestures="true"
      map:uiScrollGestures="true"
      map:uiTiltGestures="true"
      map:uiZoomControls="false"
      map:uiZoomGestures="true"
    />

标记:

    for (int i = 0; i < 9; i++) 

    mMap.addMarker(new MarkerOptions()
            .position(new LatLng(49d, 16d))
            .draggable(true)
            .title("BUUUUU")
            .snippet("TEST"));
    

【问题讨论】:

这可能是因为您只在一个位置添加了 10 个标记。只需尝试在不同的位置添加标记。 这只是一个测试用例,当标记在不同的地方时表现相同(如果没有,这将是一个微不足道的谷歌错误) 我也在该设备上运行相同的问题。当然,我可以画 50 个标记,但是在地图的 10 个平底锅之后它就死了。我在看堆,它从来没有使用过所有的堆。我仍然有 5mb,但是当它要求与您的应用程序相同的数量时它就死了。我读错了 1048576 字节吗? :( 【参考方案1】:

标记图像的大小是多少? 尝试缩小标记图像的大小

【讨论】:

以上是关于带有 10 个标记的 Android 基本 API v2 MapActivity outOfMemory的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义标记的 android Maps API v2

Gmaps API - 许多带有图标和标签的标记在移动设备上加载缓慢

来自 Azure 函数的 C# HttpClient POST 请求,带有用于第三方 API 的授权标记,被剥离了标头和正文

Google Maps Android API v2,错误的标记位置

如何在同一张地图上使用带有多个标记的谷歌地图 API

添加大量标记时,Google Maps Android API v2 非常慢