Sto scrivendo un gioco arcade in tempo reale per Android> = 2.1. Durante il gameplay non sto allocando memoria, per non sedurre GC. Beacuse se invoca GC, richiede un processore per 70-200ms. L'utente lo vede come "oh no, quel gioco è in ritardo ...".Altri processi chiamano GC che rallenta il mio gioco
Ho controllato LogCat. Ci sono molti GC_FOR_MALLOC o GC_EXPLICIT. Ma ... non dalla PID del mio processo! Il mio gioco non li sta causando. Sono causati perché altri processi, in esecuzione in background. Alcuni sfondi, widget, radio, email, controllo del tempo e altri servizi ...
Non lo capisco del tutto. Quando, per esempio, la carta da parati scompare, viene chiamato onPause(), suppongo. Quindi, dovrebbe interrompere tutti i suoi thread e certamente non allocare alcuna memoria (o chiamare System.gc()). Forse è stato implementato erroneamente? Non lo so. Ma ci sono alcuni servizi Android, che causano anche GC di tanto in tanto ... È strano.
È un grande Android < = 2,2 difetti di architettura? Android 2.3 introduces GC simultaneo, che richiede meno tempo.
Cosa posso fare per assicurarmi che il mio gioco funzioni senza intoppi?
Perché non ci credi? Sì, l'ho testato su 2.2 e 4.1. Il comportamento su 2.2 è come ho descritto. Alla 4.1, come ho detto, c'è un GC concorrente, che rende questo problema meno grave. –