我在使用(andengine)的引擎中有一种方法:

public final void setText(String pString){...}

我的应用程序每隔1秒就会从static int更新分数
mScoreText.setText(""+PlayerSystem.mScore);

问题是这样一来,每秒就会创建一个新的String对象,并且一分钟后,我有59个String对象由GC以及其他AbstractStringBuilders和init的对象来收集...

我在像这样的andengine论坛上找到了部分解决方案:
private static StringBuilder mScoreValue = new StringBuilder("000000");

private static final char[] DIGITS = {'0','1','2','3','4','5','6','7','8','9'};

mScoreValue.setCharAt(0, DIGITS[(PlayerSystem.mScore% 1000000) / 100000]);
mScoreValue.setCharAt(1, DIGITS[(PlayerSystem.mScore% 100000) / 10000]);
mScoreValue.setCharAt(2, DIGITS[(PlayerSystem.mScore% 10000) / 1000]);
mScoreValue.setCharAt(3, DIGITS[(PlayerSystem.mScore% 1000) / 100]);
mScoreValue.setCharAt(4, DIGITS[(PlayerSystem.mScore% 100) / 10]);
mScoreValue.setCharAt(5, DIGITS[(PlayerSystem.mScore% 10)]);
mScoreText.setText(mScoreValue.toString());

但主要问题仍然存在,.toString()每次调用都会返回新对象

有什么办法解决这个问题?

最佳答案

据我所知,无法解决Strings是不可变的事实,如果您的方法采用String格式,则每次都必须创建一个新的字符串。

09-25 20:33