我在使用(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格式,则每次都必须创建一个新的字符串。