Ho un problema con il disegno di circa 80 indicatori su una mappa di Google. Sto usando Google Maps Android API v2.75 indicatori sulla mappa -> perdite di memoria -> OutOfMemoryException
Le icone dei marcatori sono dinamiche (cambio di orario). Dopo aver aggiunto un marker alla mappa non è possibile cambiare l'icona. Perciò devo rimuovere tutti i marcatori e aggiungere di nuovo tutti i marcatori.
mMap.clear();
for (int i = 0; i < teams.length(); i++) {
team = teams.get(i);
point = new LatLng(tema.getLatitude(), team.getLongitude());
MarkerOptions marker = new MarkerOptions().position(point).title(name).icon(BitmapDescriptorFactory.fromResource(team.getMarkerId())));
mMap.addMarker(marker);
}
Dopo l'esecuzione di questo codice più volte (si aggiorna una volta al minuto) ottengo un OutOfMemoryExpcetion.
Quando si utilizza l'icona di marcatori più grandi, OutOfMemoryException viene lanciato più velocemente, quindi penso che il problema di memoria sia correlato all'icona bitmap che non viene riciclata correttamente.
Ho anche capito che quando si cambia la rotazione del dispositivo da orizzontale a portait e viceversa si aumenta la memoria heap utilizzata. Dopo un GC, la memoria non viene liberata.
Qualcuno sa se sto aggiungendo i marcatori in modo errato o sto affrontando un problema nell'implementazione dell'API di mappa?
ho cercato di riprodurre l'errore con l'applicazione di esempio Google Map. In android-sdk/extras/google/google_play_services/samples/maps/src/com/example/mapdemo/MarkerDemoActivity.java
è possibile trovare una demo di marker. Accelerare i test ho aumentato il numero di marker creati.
int numMarkersInRainbow = 12;
modifica
int numMarkersInRainbow = 100;
Ora inizia la demo App, selezionare i marcatori demo e passare la rotazione del dispositivo da verticale a orizzontale e viceversa un paio di volte.
mucchio iniziale:
Heap size Allocated Free %Used #Objects
11,543 BM 9,898 MB 1,645 MB 85,75% 65.982
Heap dopo un paio di orientamento cambia:
Heap size Allocated Free %Used #Objects
15,652 MB 11,337 MB 4,316 MB 72,43% 76.984
Heap dopo alcune modifiche dell'orientamento:
risultatoHeap size Allocated Free %Used #Objects
21,312 MB 16,411 MB 4,901 MB 77,00% 111.350
La finale sarà un OutOfMemoryExcpetion .
Un heap dump mostra alcune possibili perdite di heap: https://www.box.com/s/rsy0k22dcp267se2g1fy
L'heap dump completo: https://www.box.com/s/6lyv2p6rlc0njqxw5zgu
Aggiornamento: sembra essere correlato a una memoria che perde problema in Mappe Android V2. Vedere https://code.google.com/p/gmaps-api-issues/issues/detail?id=4766 In base al problema, è necessario risolvere il problema ma non l'ho provato personalmente.
Questo articolo ti aiuterà molto, se lo leggi e intraprendi le azioni appropriate: http://developer.android.com/training/displaying-bitmaps/index.html –
Andy: Grazie per il tuo suggerimento. Non sto gestendo il caricamento della bitmap da solo. È il codice di Google Maps che sta caricando le bitmap. Fornisco solo una risorsa estraibile. Ho provato a caricare i bitmap downscaled ma ho avuto gli stessi problemi. (i miei pennarelli come 2-3kb) – userM1433372
Ci sono alcuni problemi di perdita con la nuova API. Speriamo che vengano sistemati presto. – Warpzit