Convertir un entero en una cadena sin asignar memoria

He estado experimentando retrasos ocasionales en mi juego de Android cuando el recolector de basura se ejecuta. Corrí DDMS y descubrí que toda la memoria que está siendo asignada por mi aplicación es de esta línea:

scoreString = String.valueOf(score); 

¿Cuál es la mejor manera de convertir un entero a una cadena sin asignar memoria?

Asigne una matriz de caracteres para que se muestren como la partitura y utilice una tabla de búsqueda de 0-9 (esto convenientemente se asigna a una matriz de 0 bases de todos modos) para anexar a esta matriz basada en cada dígito de la partitura.

Editar: Para extraer los dígitos de su puntuación:

 12345 mod 10 = 5
 12345 mod 100 = 45/10 = 4,5 (pisos a 4)
 12345 mod 1000 = 345/100 = 3,45 (pisos a 3)
 12345 mod 10000 = 2345/1000 = 2,345 (pisos a 2)
 12345 mod 100000 = 12345/10000 = 1,2345 (pisos a 1)

También sabrá cuál es la longitud máxima para la matriz de caracteres de puntuación debe basarse en lo que está utilizando para almacenar la puntuación (es decir, int)

Recomiendo invertir el llenado de esta matriz e inicializar a todos los '0' por lo que su puntuación se mostrará como

 0000000000
 0000005127

También me encontré con este problema también, si el GC entra en acción durante un marco es realmente notable. He llegado con esta solución.

Si rellena el búfer hacia atrás, sólo puede repetir % 10 y / 10 .

Una implementación de trabajo que agrega un número a un StringBuilder, probablemente no es la mejor manera de hacerlo, pero funciona y no causa asignaciones. También puede utilizar otra matriz de caracteres para los valores en lugar de casting a char y agregar 48 ('0' en 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; } 
  • Agregar varios contactos en lote
  • Android: Objeto personalizado en AIDL
  • Conflicto con el paquete Android - Amazon SNS
  • TableLayout: quita espacio entre columnas
  • ¿Hay un HttpClient que maneja las solicitudes de almacenamiento en caché por sí solo?
  • PorterduffXfermode: borra una sección de un mapa de bits
  • Medición de intensidades de luz desde la cámara Android
  • Base de datos Sqlite que actualiza una fila Android
  • Cómo guardar la imagen a través de la captura en android a php?
  • ¿Es necesario mantener las clases del mismo paquete en el mismo dex mientras se utilizan múltiples archivos dex
  • Cómo implementar la funcionalidad de deshacer en opengl en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.