ho appena eseguito in anche a questo problema, se il GC entra in gioco durante un frame, è davvero da notare. Ho trovato questa soluzione.
Se si riempie il buffer all'indietro, è possibile solo ripetutamente % 10
e / 10
.
Un'implementazione funzionante che aggiunge un numero a uno StringBuilder, probabilmente non è il modo migliore per farlo ma funziona e non causa allocazioni. Si potrebbe anche usare un altro array di caratteri per i valori invece di colata a char e l'aggiunta di 48 ('0' in ASCII)
private char[] sbBuffer = new char[20];
private void appendInt(StringBuilder sb, int num) {
int i,j;
i = sbBuffer.length - 1;
if (num == 0) {
j = sbBuffer.length - 1;
sbBuffer[j] = (char) 48;
} else {
if (num < 0)
sb.append('-');
num = Math.abs(num);
while (num > 0) {
sbBuffer[i] = (char) (num % 10 + 48);
i--;
num /= 10;
}
j = i + 1;
}
sb.append(sbBuffer, j, sbBuffer.length - j);
/* clean up */
for (i = j; i < sbBuffer.length; i++)
sbBuffer[i] = 0;
}
Suona come il modo in cui si sta visualizzando le cose è il problema qui. Se il garbage collector o l'allocazione di stringhe stanno davvero interrompendo il tuo gioco, hai altri seri problemi che stai mascherando. – Falmarri
Puoi spiegare? Il garbage collector è probabilmente il problema di prestazioni più comune nei giochi Android. Inoltre, le prestazioni vanno bene tranne che per brevi periodi (meno di un secondo) quando rallenta. Guardando l'output del registro, questi ritardi si allineano con la garbage collection. – Computerish