2013-04-15 7 views
1

Je suis aux prises avec un problème de fuite de mémoire à Google Maps Android API v2. Les augmentations d'utilisation des tas d'environ 85KB chaque fois que mon point de vue devient visible à nouveau après:Mémoire fuite pour Android Google Maps API v2

  • écran du téléphone se éteint (par exemple après avoir appuyé sur le bouton d'alimentation).
  • L'utilisateur quitte l'application en appuyant sur le bouton Accueil.

L'application se bloque finalement avec une exception OutOfMemory. La fuite ne se produit PAS à l'écran, ou lorsque vous quittez le bouton "retour". Des idées sur une solution de contournement ou la raison de ce problème?

Mon code:

public class LeakActivity extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_leak); 
    } 
} 

et XML :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<fragment 
    android:id="@+id/map_1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment" /> 

</RelativeLayout> 
+0

double possible de http://stackoverflow.com/questions/14523949/google-maps-android-api-v2-supportmapfragment-memory-leak#comment20254946_14523949 –

+0

@TobiasMoeThorstensen pas un doublon –

Répondre

3

Cela pourrait être lié à cette question ouverte dans l'API Maps:

Issue 4766 - Bug: Android Maps API v2 leaks huge amounts of memory

Utilisez l'outil "Dump HPROF" de DDMS pour vider un fichier hprof, le convertir avec hprof-conv et utiliser MAT pour examiner la fuite. Si c'est dans l'API Google Maps, veuillez poster un apk (ou un meilleur code de test simple) pour le problème ouvert et inclure le fichier hprof.

Si c'est le même bug que celui que je rencontre, cela ne se produira que sur Android 2.x, merci de le vérifier aussi.

1

J'ai essayé d'utiliser System.gc() et map.clear() avant que la carte ne soit initialisée.

@Override 
public void onActivityCreated (Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState); 

    if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()) == ConnectionResult.SUCCESS) { 
     System.gc(); 
getMap().clear(); 
setupmap(); 


    } 
} 
@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
System.gc(); 
} 
+4

Comment pouvez-vous mettre en place le getMap(). clear(); Avant d'initialiser la carte, cela devrait certainement retourner nullpointerexecption. Veuillez re-vérifier votre message – akash89

Questions connexes