内存异常 - Google Map GroundOverLay

时间:2013-05-03 10:00:41

标签: android google-maps bitmap out-of-memory

我正试图在谷歌地图上画一幅画。我正在使用最新版本的谷歌播放服务,并检查了很多这个问题,但找不到答案。

以下是一些代码:

    BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.drawing_bg);
    LatLngBounds drawingBounds = new LatLngBounds(
                                   new LatLng(29.93530, 30.88324), 
                                   new LatLng(29.93609, 30.88329))
                                .including(new LatLng(29.93580, 30.88286))
                                .including(new LatLng(29.93563, 30.88374))
                                .including( new LatLng(29.93593, 30.88347))
                                .including(new LatLng(29.93561, 30.88298))
                                .including(new LatLng(29.93591, 30.88344))
                                .including(new LatLng(29.93563, 30.88301));
    GroundOverlay groundOverlay = mMap.addGroundOverlay(new GroundOverlayOptions()
     .image(image)
     .zIndex(2)

     .positionFromBounds(drawingBounds)
     .transparency((float) 0.0));

    final Marker currentLocationMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(29.93530, 30.88324)).draggable(true));
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(29.935431502437588,30.88327579200268), 20));

来自LogCat:

    05-03 11:45:17.860: E/dalvikvm-heap(1115): Out of memory on a 67108880-byte allocation.
    05-03 11:45:17.860: I/dalvikvm(1115): "GLThread 8598" prio=5 tid=21 RUNNABLE
    05-03 11:45:17.860: I/dalvikvm(1115):   | group="main" sCount=0 dsCount=0 obj=0x4284d580 self=0x5a559790
    05-03 11:45:17.860: I/dalvikvm(1115):   | sysTid=1502 nice=1 sched=0/0 cgrp=apps handle=1596223616
    05-03 11:45:17.860: I/dalvikvm(1115):   | schedstat=( 216011094 92043700 221 ) utm=19 stm=2 core=3
    05-03 11:45:17.860: I/dalvikvm(1115):   at android.graphics.Bitmap.nativeCreate(Native Method)
    05-03 11:45:17.860: I/dalvikvm(1115):   at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
    05-03 11:45:17.860: I/dalvikvm(1115):   at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.s.h.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.cr.a.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.cr.a.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.z.aa.b((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.z.aa.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.z.bi.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.af.v.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.af.v.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.af.v.a((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.p.q.m((null):-1)
    05-03 11:45:17.860: I/dalvikvm(1115):   at maps.p.q.run((null):-1)
    05-03 11:45:17.875: W/dalvikvm(1115): threadid=21: thread exiting with uncaught exception (group=0x412cc2a0)
    05-03 11:45:17.880: E/AndroidRuntime(1115): FATAL EXCEPTION: GLThread 8598
    05-03 11:45:17.880: E/AndroidRuntime(1115): java.lang.OutOfMemoryError
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at android.graphics.Bitmap.nativeCreate(Native Method)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at         android.graphics.Bitmap.createBitmap(Bitmap.java:620)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.s.h.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.cr.a.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.cr.a.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.z.aa.b(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.z.aa.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.z.bi.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.af.v.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.af.v.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.af.v.a(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.p.q.m(Unknown Source)
    05-03 11:45:17.880: E/AndroidRuntime(1115):     at maps.p.q.run(Unknown Source)
    05-03 11:45:29.395: W/SurfaceView(1115): CHECK surface infomation creating=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=false left=false top=false

我真的很感激任何帮助

2 个答案:

答案 0 :(得分:0)

您不应该使用太大的图像。你logcat建议你尝试分配67 MB,这对大多数设备来说太过分了。

修改

如果您想要在大区域(城市,国家/地区)上显示图片而不是在缩放时将其设置为像素化,则可以尝试使用TileOverlay而不是GroundOverlay

答案 1 :(得分:0)

您看到的这些67Mb似乎来自Google地图中已确认的错误,请点击此处了解详情:https://code.google.com/p/gmaps-api-issues/issues/detail?id=7325

它于2月(2015年备案)修复。如果您使用最新版本的谷歌地图,应该可以解决。