2012-09-03 59 views
3

我有一個使用地圖活動作爲整個應用程序的一部分的應用程序,並且當我放大和縮小時,出現「內存不足」錯誤。我只有一個覆蓋項目。任何想法如何解決這個問題?這是我的xml下面,它是相當嵌套的。Android MapView在縮放時出現內存不足錯誤

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:id="@+id/contact_layout" > 

<com.google.android.maps.MapView 
    android:id="@+id/mapview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:apiKey="..." 
    android:clickable="true" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="90dp" 
    android:layout_alignParentBottom="true" 
    android:orientation="horizontal" 
    android:paddingBottom="20dp" 
    android:paddingLeft="15dp" 
    android:paddingRight="15dp" 
    android:paddingTop="20dp" 
    android:weightSum="100" > 

    <ImageView 
     android:id="@+id/phone_icon" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="20" 
     android:adjustViewBounds="true" 
     android:src="@drawable/phone_icon" /> 

    <ImageView 
     android:id="@+id/email_icon" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="20" 
     android:adjustViewBounds="true" 
     android:src="@drawable/mail_icon" /> 

    <ImageView 
     android:id="@+id/bus_icon" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="20" 
     android:adjustViewBounds="true" 
     android:src="@drawable/bus_icon" /> 

    <ImageView 
     android:id="@+id/twitter_icon" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="20" 
     android:adjustViewBounds="true" 
     android:src="@drawable/twitter_icon" /> 

    <ImageView 
     android:id="@+id/facebook_icon" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="20" 
     android:adjustViewBounds="true" 
     android:src="@drawable/facebook_icon" /> 
</LinearLayout> 

<RelativeLayout 
    android:id="@+id/navigation_bar_without_back" 
    android:layout_width="match_parent" 
    android:layout_height="40dp" 
    android:layout_alignParentTop="true" 
    android:background="@drawable/header_navigation" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/anatolia_logo" 
     android:layout_width="50dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginBottom="-10dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginTop="-10dp" 
     android:adjustViewBounds="true" 
     android:src="@drawable/..." /> 

    <ImageView 
     android:id="@+id/call_button_without_back" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="10dp" 
     android:adjustViewBounds="true" 
     android:src="@drawable/call_button" /> 
</RelativeLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_below="@+id/navigation_bar_without_back" 
    android:background="@drawable/contact_layout_background" > 

    <WebView 
     android:id="@+id/info_field" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

</RelativeLayout> 

logcat的跟蹤

09-03 11:43:20.752: E/AndroidRuntime(930): FATAL EXCEPTION: main 
09-03 11:43:20.752: E/AndroidRuntime(930): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.graphics.Bitmap.nativeCreate(Native Method) 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.graphics.Bitmap.createBitmap(Bitmap.java:477) 
09-03 11:43:20.752: E/AndroidRuntime(930): at  com.google.android.maps.ZoomHelper.createSnapshot(ZoomHelper.java:444) 
09-03 11:43:20.752: E/AndroidRuntime(930): at com.google.android.maps.ZoomHelper.doZoom(ZoomHelper.java:151) 
09-03 11:43:20.752: E/AndroidRuntime(930): at com.google.android.maps.ZoomHelper.doZoom(ZoomHelper.java:140) 
09-03 11:43:20.752: E/AndroidRuntime(930): at com.google.android.maps.MapView.doZoom(MapView.java:1517) 
09-03 11:43:20.752: E/AndroidRuntime(930): at com.google.android.maps.MapView.doZoom(MapView.java:1526) 
09-03 11:43:20.752: E/AndroidRuntime(930): at com.google.android.maps.MapView$6.onZoom(MapView.java:1481) 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.widget.ZoomButtonsController$4.onClick(ZoomButtonsController.java:274) 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.view.View.performClick(View.java:2485) 
09-03 11:43:20.752: E/AndroidRuntime(930): at andrd.view.View$PerformClick.run(View.java:9080) 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.os.Handler.handleCallback(Handler.java:587) 
09-03 11:43:20.752: E/AndroidRuntime(930): at andrid.os.Handler.dispatchMessage(Handler.java:92) 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.os.Looper.loop(Looper.java:130) 
09-03 11:43:20.752: E/AndroidRuntime(930): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    09-03 11:43:20.752: E/AndroidRuntime(930):  at java.lang.reflect.Method.invokeNative(Native Method) 
    09-03 11:43:20.752: E/AndroidRuntime(930): at java.lang.reflect.Method.invoke(Method.java:507) 
    09-03 11:43:20.752: E/AndroidRuntime(930): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    09-03 11:43:20.752: E/AndroidRuntime(930): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    09-03 11:43:20.752: E/AndroidRuntime(930): at dalvik.system.NativeStart.main(Native Method) 
+0

這有點長。請嘗試將代碼簡化爲導致相同問題的簡單示例/ – njzk2

+0

另外,您是面對真實設備還是仿真器? – AlexN

+0

@AlexN我在真實設備上和仿真器上面對它。 – osayilgan

回答

2

有很多嵌套佈局內ImageViews的。 不幸的是圖像加載和位圖可以是PITA。 ImageViews已知會導致OutOfMemoryErrors。尤其是當他們從代碼中獲得位圖填充時。

要解決該問題,請移除ImageView並檢查錯誤是否仍然存在。

如果它解決了錯誤,請重新考慮在MapView上顯示圖像的策略。同樣使用density-dependent資源可能有助於在一定程度上解決問題。

編輯:在你的堆棧跟蹤之後,它說:「位圖超出虛擬機預算」我確信你的圖像加載策略需要改進。

+0

我會嘗試刪除一些圖像視圖,看看它是否仍然存在,但我需要以某種方式使用這些圖像視圖,你有任何想法如何顯示這些圖像? – osayilgan

+0

是的。閱讀我的答案的第三段。這是解決您的問題的可能性。 – keyboardsurfer

+0

但是我已經爲這個圖像視圖使用了很小的圖像,我有大約5-6個圖像,最大的是65x65像素。 – osayilgan

相關問題