android MapView verursacht immer einen OutOfMemoryError in verschachtelten Elementen

8

Ich versuche ein MapView (derzeit ohne Overlays) in einigen verschachtelten Elementen zu erstellen. Es ist im Grunde so etwas wie ScrollView -> RelativeLayout -> RelativeLayout -> MapView

%Vor%

Scheint gut für mich. Es gibt nichts mehr, was ich damit beim Start mache, aber es verursacht immer das Folgende:

%Vor%

Hast du eine Idee, warum das so ist und was ich tun kann, um es los zu werden? Ich kann es nicht aus dieser Sicht herausnehmen, da es der Ort ist, an dem ich es brauche.

Danke!

    
ShadowMare 28.03.2011, 14:42
quelle

7 Antworten

11

Ich habe etwas ganz einfaches herausgefunden.

Platzieren Sie das MapView einfach in ein FrameLayout. Lassen Sie FramgeLayout wrap_content | sein wrap_content und alles ist in Ordnung:)

Dieser Punkt schlägt fehl:

%Vor%

Ich bekomme den folgenden Stacktrace:

%Vor%

Hier ist die Lösung:

%Vor%

Grüße, Marco

    
DaRolla 21.02.2012, 16:14
quelle
6

Ich hatte dieses Problem auch, es tritt auf, wenn Sie versuchen, die genauen Abmessungen eines Mapview anzugeben. Legen Sie eine der Dimensionen auf "fill_parent" oder "wrap_content" fest und lassen Sie die andere Dimension wie gewünscht aussehen. Das sollte den Trick machen.

    
steemcb 19.04.2011 10:59
quelle
2

Ich sehe nicht wirklich, wo Sie einen OutOfMemoryError bekommen? Ich sehe das:

%Vor%

Was besagt, dass Sie MapView nur innerhalb einer Klasse erstellen können, die MapActivity erweitert, und dies bedeutet, dass Sie dies nicht tun?

    
Nanne 04.04.2011 11:38
quelle
2

Sehen Sie sich den folgenden Thread an:

Problem 2181: Speicherverlust im System bei Verwendung von MapView

Scheint so, als wäre dies etwas in MapActivity intern. Der Thread ist nun seit über zwei Jahren am Leben und wurde nicht als behoben gemeldet ...

Edit: habe die dort beschriebene Lösung ausprobiert und mich zu einer ähnlichen Lösung geführt:

%Vor%     
Muzikant 26.05.2011 06:07
quelle
2

steemcb ist korrekt, aber leider gibt es auch einen Fehler in MapView Das bewirkt, dass dies auch dann geschieht, wenn Ihr Layout gut ist. Ich habe genau die gleiche Stack-Ablaufverfolgung wie Ihre. Es ist eine fragile Komponente und kleine Änderungen am Layout-Typ führen dazu, dass es unerwartet bricht, besonders wenn es in eine ScrollLayout eingebunden ist.

Es wurde noch niemand von dem Android-Projekt angesprochen.

    
Neil Traft 26.01.2012 22:35
quelle
1

Dies wird verursacht, indem die MapView in eine Scrollansicht platziert wird. Siehe android MapView verursacht immer einen OutOfMemoryError in verschachtelten Elementen für weitere Informationen.

    
Danny Remington - OMS 07.07.2011 17:14
quelle
0

Tatsächlich wird es durch Scrollview verursacht, einen Puffer zu verursachen, um die Ansicht an jeder möglichen Position der Scrollbar zu enthalten, um schnelles und glattes Scrollen zu ermöglichen. Da eine MapView ziemlich groß ist, wenn die Kacheln während der Messphase geladen werden, kann der resultierende von ScrollView erstellte Puffer sehr groß sein (etwa 128 M). Wenn Sie Ihren Emulator nicht auf mehr als 256 MByte RAM- und Heap-Speicher setzen, schlägt der Fehler mit einem Speichermangel fehl. Sie könnten Ihren Emulator auf 512 MB RAM und Heap-Speicher setzen, aber Ihre App würde auf jedem Gerät abstürzen, das weniger als 512 MB RAM oder nicht genügend Heap-Speicher hat. Am besten entfernen Sie die MapView aus der ScrollView.

    
Danny Remington - OMS 30.06.2011 14:00
quelle