2012-02-28 18 views
7

Wdrażam aplikację korzystającą z Map Google. Podczas debugowania znalazłem ciekawy błąd, który możesz łatwo odtworzyć (mam nadzieję). Jeśli test, który za przykładem Witam MapView od Google:Czy to jest błąd MapView?

http://developer.android.com/guide/tutorials/views/hello-mapview.html

Błąd: Jeśli przesuwać w dowolnym kierunku szybko (spróbuj po skosie), na pewien okres czasu, prawdopodobnie będzie się następujący błąd:

02-28 15:59:45.138: D/dalvikvm(26484): GC_CONCURRENT freed 2K, 13% free 18870K/21639K,  paused 2ms+4ms 
02-28 15:59:45.911: D/dalvikvm(26484): GC_FOR_ALLOC freed 1603K, 20% free 17396K/21639K, paused 14ms 
02-28 15:59:45.911: I/dalvikvm-heap(26484): Grow heap (frag case) to 18.546MB for 1560976-byte allocation 
02-28 15:59:45.942: D/dalvikvm(26484): GC_CONCURRENT freed 1K, 13% free 18919K/21639K, paused 2ms+2ms 
02-28 15:59:54.271: D/dalvikvm(26484): GC_CONCURRENT freed 2794K, 19% free 17649K/21639K, paused 2ms+2ms 
02-28 15:59:58.497: D/dalvikvm(26484): GC_CONCURRENT freed 856K, 18% free 17880K/21639K, paused 5ms+3ms 
02-28 16:00:04.341: D/dalvikvm(26484): GC_CONCURRENT freed 1003K, 17% free 18063K/21639K, paused 4ms+4ms 
02-28 16:00:11.083: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.091: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.614: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.614: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.638: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.646: D/dalvikvm(26484): GC_CONCURRENT freed 1097K, 16% free 18222K/21639K, paused 2ms+6ms 
02-28 16:00:11.646: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 
02-28 16:00:11.646: D/skia(26484): ------- imageref_ashmem create failed <(null)> 131072 

Mapa ulega awarii. Każdy pomysł, jak to rozwiązać?

+0

Przetestowałem ten przykład na smartphone Galaxy S2 i Galaxy Nexus – user1238247

+0

Ale myślę, że nie jest to prawdziwy problem z kodem . Nie ma błędu, są tylko komunikaty debugowania i informacje. Czy to w jakiś sposób wpływa na twój kod i wrażenia użytkownika? – Yury

+1

Problem polega na tym, że po przesunięciu palcem po mapie (szybko) mapa ulega awarii. Po katastrofie mapa nie nadaje się do użytku. Kiedy mapa się zawiesza, pojawia się następujący komunikat "imageref_ashmem create failed" (jak widać powyżej). Myślę, że są pewne problemy z pamięcią. Kod jest przykładowym kodem z linku podanego powyżej. Czy ktoś może odtworzyć to zachowanie? – user1238247

Odpowiedz

1

Pomyśl Google Maps awarie z OutOfMemoryError I catched to kilka razy na moim HTC Wildfire. Można go łatwo odtworzyć na urządzeniach z małą pamięcią sterty. Kiedy szybko przesuniesz (zmienisz rozmiar), przekroczysz całą stertę. Sądzę, że garbage collector w niektórych przypadkach nie jest w stanie zwolnić pamięci tak szybko, że wyczerpuje się pamięć.

+2

Co może być rozwiązaniem poza użyciem largeHeap = "true"? – tasomaniac

1

W wielu przypadkach przerywane awarie przy użyciu MapView można rozwiązać, upewniając się, że podałeś przy użyciu largeHeap w elemencie "application" manifestu aplikacji, szczególnie na większych urządzeniach (tabletach). Ten atrybut jest dostępny począwszy od poziomu API 11 (Android 3.0).

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ge.android.app" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="12" /> 

    <application android:icon="@drawable/app" android:label="@string/app_name" 
       android:debuggable="true" 
       android:theme="@style/CustomTheme" 
       android:largeHeap="true"> 
    ... 
    </application> 
    ... 
</manifest> 

Patrz również: Android Developer Guide - Android Manifest

Powiązane problemy