Google API MapView OutOfMemory после установки MapView на определенную ширину и высоту

#android #android-mapview #out-of-memory

#Android #android-mapview #нехватка памяти

Вопрос:

я искал эту проблему, и я нашел несколько вопросов stackoverflow о том же, но без какой-либо идеи, как решить проблему.

Я создал activity и хочу добавить действительно маленький mapview (например, 140 Вт 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, это работает, но мне не нужен mapview с fill_parent.

Может быть, вы, ребята, знаете другой способ получить небольшое изображение для предварительного просмотра текущей (или заданной) позиции на карте в виде изображения. Разве невозможно отобразить небольшой mapview?

Спасибо

Комментарии:

1. Привет, Микро, я попробовал ваш код, и у меня это работает.

2. Можете ли вы опубликовать весь файл макета? Похоже, у вас там много элементов управления макетом…..

3. хм .. хорошо, да, это действительно большая работа с ImageView, TextViews (8), TableLayout и RelativeLayout. Но речь идет о некоторой информации, и я не могу оставить что-либо из этого. РЕДАКТИРОВАТЬ: Но почему это работает с fill_parent??

4. Итак: проблема заключается в ширине MapView. Когда я устанавливаю ширину в fill_parent и высоту в 80dip, это работает. Это не то, что я хочу иметь, но и это прекрасно. Что я мог бы сделать, так это установить левое поле, но это не очень приятно. Итак, я не могу решить проблему, но у меня есть приятное решение. Если вы можете решить проблему без обходных путей, пожалуйста, скажите мне. Спасибо

Ответ №1:

Если вы просто хотите показать статическую карту без взаимодействия, я рекомендую static map api от Google. Вы можете определить маркеры, центр, размер и некоторые метки, и это возвращает сгенерированное изображение, которое можно легко отобразить внутри ImageView. Преимущество этого: вам не нужно вызывать полный MapView только для небольшого изображения карты. Никаких затрат памяти или взаимодействия с пользователем. Идеально подходит для вашего сценария.