Utilizzo di 2 attività semplici. Prima azione che contiene solo un pulsante per avviare la seconda attività che detiene la mappa:API di Google Maps Android v2 Perdita di memoria SupportMapFragment di memoria
attività principale:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goToMap(View view){ //This is just the onClick method for the button
Intent intent=new Intent(this, BigMapTest.class);
startActivity(intent);
}
L'attività di mappa:
public class BigMapTest extends FragmentActivity {
SupportMapFragment mapFragment;
GoogleMap map;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.travel_diary_big_map);
mapFragment=(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.big_map);
map=mapFragment.getMap();
}
Il layout XML per l'attività mappa:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/big_map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.SupportMapFragment"
/>
Ora quando eseguo questo codice, premendo il pulsante per passare all'Attività con la mappa, e premendo indietro per arrivare alla prima attività ... quindi ripetendo il processo, posso vedere l'heap aumentare di dimensioni ogni volta, fino a quando raggiunge i suoi limiti e poi inizia a bloccare. Se si scherza un po 'di più con la mappa (ad esempio lo zoom) posso ottenere un'eccezione OOM a questo punto.
01-25 16: 10: 13.931: D/dalvikvm (21578): GC_FOR_ALLOC liberato 1898K, 7% da 45859K/49187K, pausa 204ms
01-25 16: 10: 14,671: I/dalvikvm- mucchio (21578): morsetto bersaglio GC mucchio da 52.724MB a 48.000MB
01-25 16: 10: 14,671: D/dalvikvm (21578): GC_CONCURRENT liberato 2534K, 6% da 46554K/49187K, pausa 3ms + 14ms
01-25 16: 10: 15.372: I/dalvikvm-heap (21578): Clamp di destinazione GC heap da 52.979 MB a 48.000 MB
01-25 16: 10: 15.382: D/dalvikvm (21578): GC_CONCURRENT liberato 2273K, 5% gratuito 46815K/49187K, in pausa 3ms + 15ms
01-25 16: 10: 15.622: I/dalvikvm-heap (21578): Clam p target GC heap da 52.604 MB a 48.000 MB
01-25 16: 10: 15.622: D/dalvikvm (21578): GC_FOR_ALLOC liberato 657K, 6% gratuito 46431K/49187K, sospeso 202 ms
01-25 16:10: 16.203: I/dalvikvm-heap (21578): Clamp di destinazione GC heap da 52.959 MB a 48.000 MB
01-25 16: 10: 16.203: D/dalvikvm (21578): GC_FOR_ALLOC liberato 1469K, 5% libero 46796K/49187K, in pausa 217 ms
01-25 16: 10: 16.203: I/dalvikvm-heap (21578): forzatura della raccolta di SoftReferences per l'allocazione di 278744 byte
01-25 16: 10: 16.423: I/dalvikvm-heap (21578) Clamp target GC heap da 52.952 MB a 48.000 MB
01-25 16: 10: 16.423: D/dalvikvm (21578): GC_BEFORE_OOM liberato 9K, 5% libero 46786K/49187K, sospeso 219 ms
01-25 16: 10: 16.423: E/dalvikvm-heap (21578): memoria esaurita su un'allocazione di 278744 byte.
Qualsiasi suggerimento/aiuto sarebbe apprezzato.
Utilizzare MAT per determinare l'origine della perdita. – CommonsWare
Usare MAT e quindi cercare l'oggetto con la dimensione più grande mantenuta (che continua a crescere ad ogni ciclo), quindi usando il percorso per le radici GC escludendo i riferimenti deboli, ho raggiunto quanto segue: class maps.by.a @ 0x414f7fa8 System Class. - Ma non so cosa fare dopo. – Nims
Sembra che qualcosa stia accumulando in una Hashmap: la classe "maps.by.a", caricata da "dalvik.system.PathClassLoader @ 0x413de740", occupa 12,923,112 (57,78%) byte. La memoria viene accumulata in un'istanza di "java.util.HashMap $ HashMapEntry []" caricata da "". Parole java.util.HashMap $ HashMapEntry [] maps.by.a dalvik.system.PathClassLoader @ 0x413de740 –
Nims