simplemente me encontré en a este problema también, si el GC se activa durante un cuadro, es realmente notable. Se me ocurrió esta solución.
Si se llena la memoria intermedia hacia atrás, sólo puede repetidamente % 10
y / 10
.
Una implementación de trabajo que agrega un número a un StringBuilder, probablemente no sea la mejor manera de hacerlo pero funciona y no causa asignaciones. También es posible usar otro array de caracteres para los valores en lugar de echar a char y añadiendo 48 ('0' en el 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;
}
suena como la forma en que está mostrando cosas está el problema aquí. Si el recolector de basura o la asignación de cadenas realmente están alterando tu juego, tienes otros problemas serios que estás ocultando. – Falmarri
¿Podría explicarlo? El recolector de basura es probablemente el problema de rendimiento más común en los juegos de Android. Además, el rendimiento es bueno, excepto por períodos breves (menos de un segundo) cuando se ralentiza. En cuanto a la salida de registro, estos retrasos se alinean con la recolección de basura. – Computerish