将MapView设置为特定的宽度和高度后,Google API MapView OutOfMemory

问题描述:

我搜索了这个问题,并且发现了一些关于相同的*问题,但没有任何想法如何解决问题。将MapView设置为特定的宽度和高度后,Google API MapView OutOfMemory

我创建了一个活动,我想添加一个非常小的mapview(如140w X 70h)。它只是显示一个地方的小预览。当你点击这个小小的mapview时,你会得到一个新的洞穴地图。

的MapView:

<com.google.android.maps.MapView android:id="@+id/mapview" 
       android:layout_width="140dip" 
       android:layout_height="80dip" 
       android:layout_below="@id/attributes" 
       android:layout_alignParentRight="true" 
       android:apiKey="****" 
       android:paddingBottom="60dp"/> 

的logcat:

05-30 14:34:53.758: ERROR/dalvikvm(1608): Out of memory: Heap Size=4039KB, Allocated=2768KB, Bitmap Size=625KB 
05-30 14:34:53.758: DEBUG/AndroidRuntime(1608): Shutting down VM 
05-30 14:34:53.758: WARN/dalvikvm(1608): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608): FATAL EXCEPTION: main 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608): java.lang.OutOfMemoryError 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at com.google.googlenav.map.Map.resize(Unknown Source) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at com.google.android.maps.MapView.onMeasure(MapView.java:554) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.View.measure(View.java:8172) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.View.measure(View.java:8172) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:989) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.ScrollView.onMeasure(ScrollView.java:286) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.View.measure(View.java:8172) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.View.measure(View.java:8172) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3140) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.View.measure(View.java:8172) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3140) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.View.measure(View.java:8172) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.ViewRoot.performTraversals(ViewRoot.java:805) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1744) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.os.Looper.loop(Looper.java:144) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-30 14:34:53.768: ERROR/AndroidRuntime(1608):  at dalvik.system.NativeStart.main(Native Method) 

这是错误。当我使用fill_parent它的作品,但我不希望与fill_parent mapview。

也许你们知道另一种方式来获取当前(或给定)位置在地图上的小图像预览图像。 是不是可以显示一个小的mapview?

感谢

+0

嗨微,我试过你的代码,它适用于我。 – 2011-05-30 13:04:35

+0

你可以发布你的整个布局文件吗?似乎你有很多布局控制在那里..... – ddewaele 2011-05-30 13:06:48

+0

嗯..好吧,是的,这是一个非常大的活动与imageView,TextViews(8),TableLayout和RelativeLayout。但它是关于一些信息,我不能离开它。编辑:但为什么它与fill_parent工作? – Informatic0re 2011-05-30 13:16:37

如果你只是想显示没有互动,我建议从谷歌static map api静态地图。您可以定义标记,中心,大小和一些标签,并返回一个生成的图像,可以很容易地显示在ImageView中。这样做的好处:您不必为小地图图像调用完整的MapView。没有内存或用户交互的开销。适合你的场景。

+0

谢谢,这是最好的方法 – Informatic0re 2011-05-31 11:27:24