6

Questi arresti si verificano in modo intermittente mentre si esegue il backup nella mia attività principale, che consiste di due frammenti (uno è un frammento di supporto di Google Maps) . Se non fosse stato per il nostro sistema di tracciamento degli arresti anomali, non avrei idea che gli utenti stessero vivendo questo, in quanto non è riproducibile su nessuno dei miei dispositivi fisici o emulati. Si estende varie API tra il minimo di 15 e mio target di 22.java.lang.OutOfMemoryError: android.support.v4.app.BackStackState [] di lunghezza 1279544898 avrebbe un overflow

Nel sistema incidente, l'incidente si verifica in una delle due forme:

java.lang.OutOfMemoryError: android.support.v4.app.BackStackState[] of length 1279544898 would overflow 

o

java.lang.OutOfMemoryError: Failed to allocate a 5118179604 byte allocation with 16777216 free bytes and 472MB until OOM near/at g.newArray:174 

L' arresto anomalo si verifica nel metodo onViewCreated del frammento contenente la mia mappa:

mMapView.onCreate(savedInstanceState); 

Il mio primo t è una perdita di memoria, ma ... sembra che si stia facendo un ciclo durante la creazione del backstack - come se l'indice degli storni abbia superato il lungo. Leak Canary non ha riscontrato perdite di memoria (tranne la nostra MainApplication, che a mio avviso conserva un riferimento statico al contesto). E se fosse una tipica perdita di memoria, sembra strano che questo crash si verifichi sempre sulla stessa linea e da nessun'altra parte. Esistono altre aree ad alta intensità di memoria di questa app (che è un'impresa, quindi non posso divulgare troppo), ma nessuna di queste attività ha generato errori OOM.

Devo anche notare che questa è un'app matura, con molti utenti e versioni. Il problema di OOM si verifica SOLO nella versione beta della nostra versione corrente (di nuovo, basata esclusivamente sui record del nostro sistema di tracciamento degli incidenti, dal momento che non siamo in grado di riprodurre da nessuna parte). Ho effettuato confronti approfonditi sul codice tra la nostra versione di produzione e la nostra versione beta, e la maggior parte delle modifiche sono relativamente standard/banali. (Non ho iniziato l'aggiunta di nuove immagini bitmap o nulla.)

Le specifiche:

  • Play Services 8.4.0
  • Gradle 2.1 API
  • target API 22
  • Min 15
  • ProGuard abilitato

Chi lo vede? Posso vedere l'incidente sta accadendo, ma è terribilmente difficile da rintracciare quando non riesco a riprodurre ...

+0

aggiungi codice onCreate completo – Zoe

+0

È un codice aziendale, quindi non posso. Ho provato ad aggiungere tutte le cose rilevanti che potevo senza violare la politica. –

+0

quindi non dovresti fare domande a riguardo – Zoe

risposta

1

Rispondendo alla mia domanda ...

ho potuto a Repro l'errore abilitato Don Mantieni attività in opzioni sviluppatore.

Dopo tre giorni di test, alla fine ho scoperto che il nostro server di compilazione stava compilando il supporto 24 invece del supporto 22 che ho specificato in Gradle. Evidentemente c'è qualche incompatibilità tra il supporto 24 e le mappe Android. Modificando:

compile 'com.android.support:support-v4:22.2.0' 

a

compile('com.android.support:support-v4:22.2.0') { 
    force = true 
} 

forzando Gradle prendere 22 invece del successivo 24 a sua disposizione, il backstack loop andato via. Ora non vedo più l'OOM con i nostri utenti beta.

Suppongo che abbia qualcosa a che fare con il cambio del modello di autorizzazione dell'API, ma chissà.

In ogni caso ... speriamo che questo aiuti qualcuno.

+0

Qual è la versione di google play services maps? –

+0

Stavamo usando 8.4, sebbene 9.2 sia ora disponibile. Vedi le [note sulla versione] (https://developers.google.com/android/guides/releases). –

+0

Abbiamo questo arresto anomalo su Google Play Services Map 9.0.2 e supporta la versione 24, quindi ero curioso di vedere se si trattava di un caso simile –