我有一个每隔几百毫秒发送一次更新的服务。我有一个字符串,每次都会创建一个带有事件描述的字符串(“经过的时间是 32 秒”)。不幸的是,我不能只使用整数,因为内容可能会根据事件而改变(通常是相同的事件类型),并且反馈会返回给用户。有没有一种方法可以静态重用相同的字符串,这样每分钟就不会分配 100 次字符串?即使我重用相同的变量,即:
mEventUpdate = "Time elapsed is " + time + " seconds";
我仍然看到很多字符串分配。
至少您可以使用String.format()
来减少创建对象的数量:
mEventUpdate = String.format("Time elapsed is %d seconds", time);
Java 中的AString
是不可变对象。一旦创建,您将无法再更改它。因此,如果它真的必须是String
,就没有办法避免分配。
使用字符串缓冲区
如果您有一个返回字符串的方法,并且您知道无论如何它的结果将始终附加到 StringBuffer,请更改您的签名和实现,以便该函数直接执行附加,而不是创建一个短暂的临时对象。
http://developer.android.com/training/articles/perf-tips.html#ObjectCreation
我不会为冗长的答案而烦恼,要么像有人说的那样使用格式,要么使用经常被忽视的StringBuffer
- 我在将大量String
s 连接在一起时使用,比如在一个循环中,使用格式是不可能的。
http://developer.android.com/reference/java/lang/StringBuffer.html
(我喜欢 Android 的参考,因为它与那个讨厌的甲骨文的讨厌的相比:P)
将其声明为全局静态变量
public static StringBuilder mEventUpdate = new StringBuilder();
mEventUpdate.delete(0, buffer.length());
mEventUpdate.append("Time elapsed is ");
mEventUpdate.append(time);
mEventUpdate.append(" seconds");
// TO desplay
mEventUpdate.toString();