2 votes

Android MapView avec GoogleTileOverlay ne libère pas les bitmaps

J'ai un problème avec le dessin de tuiles personnalisées sur Google maps.

Utilisation GoogleTileOverlay de OSMDroid Je dessine des tuiles personnalisées qui sont stockées localement sur la carte SD de l'appareil.

Le problème survient après que j'ai ouvert la carte et que j'essaie de retourner à d'autres activités. Les choses commencent à devenir bizarres. Les couleurs d'arrière-plan définies en XML ne s'affichent pas et d'autres choses étranges se produisent.

J'ai cherché la raison dans tous les sens et tout ce que j'ai trouvé, c'est qu'il n'y a pas assez de mémoire ?

Selon Eclipse MAT il reste 8,4 Mo de bitmaps après J'ai détruit l'activité qui tient le MapView y GoogleTileOverlay

Faites-moi savoir si je peux vous fournir d'autres informations.

1voto

plesatejvlk Points 152

J'avais affaire à des exceptions OOM dues à des fuites de mémoire provenant des bitmaps. Il semble que la suppression de l'incrustation de MapView 's Overlay avant de vider le cache des tuiles (afin qu'aucune nouvelle tuile ne soit créée après l'effacement) dans la rubrique onPause de l'activité cartographique fonctionne. J'ai fini par avoir une seule instance de LRUMapTileCache quel que soit le nombre de fois où l'activité de la carte a été créée/reprise.

Mon onPause est le suivant :

// .. get custom tiles off the screen first
mMapView.getOverlays().remove(mCustomTilesOverlay);         
// .. release all custom tiles' bitmaps
mCustomTilesOverlay.clearTileCache();
// .. unregister intent receiver (in order not to leak it)
mCustomTilesOverlay.detach();
// .. indicate not-ready state by clearing the reference
mCustomTilesOverlay = null;

Les 8 MB persistent cependant (voir édition), j'utilise l'option android:largeHeap="true" pour compenser.

éditer

Il s'est avéré que ces 8 MB provenaient d'autres sources. La mémoire cache est vidée avec succès.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X