【问题标题】:Google API MapView OutOfMemory after setting the MapView to specific width and height将 MapView 设置为特定宽度和高度后的 Google API MapView OutOfMemory
【发布时间】:2011-05-30 12:48:21
【问题描述】:

我搜索了这个问题,我发现了一些关于相同但不知道如何解决问题的 stackoverflow 问题。

我创建了一个活动,我想添加一个非常小的地图视图(如 140w X 70h)。它只是显示该地点所在位置的一个小预览。当你点击这个小地图视图时,你会得到一个新的膨胀到一个带有洞地图的新活动。

地图视图:

<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 的地图视图。

也许你们知道另一种方法来获取地图上当前(或给定)位置的预览小图像作为图像。 不能显示一个小的地图视图吗?

谢谢

【问题讨论】:

  • 嗨,Micro,我已经尝试过您的代码,它对我有用。
  • 你能发布你的整个布局文件吗?好像你有很多布局控件在那里.....
  • hm.. 好吧,是的,这是一个非常大的活动,包括 imageView、TextViews (8)、TableLayout 和 RelativeLayout。但它是关于一些信息的,我不能留下任何信息。编辑:但为什么它与 fill_parent 一起工作??
  • 所以:问题是mapView的宽度。当我将宽度设置为 fill_parent 并将高度设置为 80dip 时,它可以工作。这不是我想要的,但也很好。我能做的是,设置 marginLeft 但它不是很好。所以我无法解决问题,但我有一个漂亮的工作区。如果您可以在没有 Workarround 的情况下解决问题,请告诉我。谢谢

标签: android android-mapview out-of-memory


【解决方案1】:

如果您只想显示静态地图而无需交互,我推荐来自 google 的 static map api。你可以定义标记、中心、大小和一些标签,它会返回一个生成的图像,可以很容易地在 ImageView 中显示。这样做的好处:您不必只为一个小地图图像调用完整的 MapView。没有内存或用户交互的开销。非常适合您的场景。

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 2012-04-29
    • 2011-08-17
    • 2013-01-15
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多