我在一个单独的线程中有一个严格的游戏循环,我在画布上画了很多东西。
当我将分数绘制到画布时,我使用以下函数:
public void clearAndDraw(Canvas canvas, Integer score) {
canvas.drawText(score.toString(), middleOfScreen, textYPosition, paint);
当我在ddms中检查分配时,我看到.toString并不奇怪,在从Integer到String的每次转换中分配一个char数组。这个数组最终将被垃圾收集器声明并导致慢速Android设备上帧的不均匀渲染。
有没有更好的方法在画布上绘制整数,不会导致新的分配和垃圾收集?
答案 0 :(得分:1)
使用这种简单的转换器方法重用相同的char[]
:
private static void intToChar(char[] array, int input) {
int i = array.length - 1;
while (input > 0 && i >= 0) {
array[i--] = (char) (48 + input % 10);
input /= 10;
}
}
确保您传递的char[]
足够大,以适应给定的整数。这也假设是ASCII编码。