Android 内存不足异常-谷歌地图地面覆盖
我想在谷歌地图上画一幅画。我正在使用最新版本的google play服务,对此问题进行了大量检查,但没有找到答案 下面是一些代码:Android 内存不足异常-谷歌地图地面覆盖,android,google-maps,bitmap,out-of-memory,Android,Google Maps,Bitmap,Out Of Memory,我想在谷歌地图上画一幅画。我正在使用最新版本的google play服务,对此问题进行了大量检查,但没有找到答案 下面是一些代码: BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.drawing_bg); LatLngBounds drawingBounds = new LatLngBounds( new LatL
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
我非常感谢任何帮助您不应该使用太大的图像。logcat建议您尝试分配67MB,这对于大多数设备来说太多了 编辑:
如果您想在大面积(城市、国家)上显示图像,并且在缩放时不进行像素化,可以尝试使用
TileOverlay
而不是GroundOverlay
。您看到的这些67Mb图像似乎来自谷歌地图中的一个确认错误,请参阅此处以获取更多信息:
早在2月份就已经修复了(记录为2015年)。如果您使用最新版本的谷歌地图,应该可以解决这个问题。我尝试使用的图像只有663KB,分辨率为1223x1248。你能告诉我该不该处理吗?我可以缩小图像的大小,但我需要最好的放大质量。同样,这个问题发生在三星S3和东芝Thrive平板电脑上,但在三星S3 Mini上没有。当将1223x1248图像放入与设备密度匹配的可绘制nodpi或文件夹中时,其内存约为6MB。每个像素需要4个字节。如果将它放在xhdpi设备上的mdpi文件夹中,它的内存将扩展到24MB。我不确定这67MB是从哪里来的。这是你在地图活动中的唯一代码吗?在地图上方和我使用的同一图像下方,有另一个以编程方式绘制的覆盖图。我想你可能遇到了与我相同的问题。我在谷歌地图Android API跟踪器上打开了一个bug报告:有什么解决方案吗?