我有一个服务,每几百毫秒发送一次更新。我有一个String,每次都会创建一个事件描述(“经过的时间是32秒”)。不幸的是,我不能只使用整数,因为内容可能会根据事件而改变(通常情况下它是相同的事件类型),并且反馈将返回给用户。有没有办法可以静态地重用相同的String,这样每分钟就不会有100个字符串分配?即使我重复使用相同的变量,即:
mEventUpdate = "Time elapsed is " + time + " seconds";
我仍然看到很多字符串分配。
答案 0 :(得分:2)
至少可以使用String.format()
来减少创建对象的数量:
mEventUpdate = String.format("Time elapsed is %d seconds", time);
答案 1 :(得分:1)
Java中的String
是一个不可变的对象。创建后,您无法再进行更改。因此,如果真的必须是String
,则无法避免分配。
答案 2 :(得分:1)
使用StringBuffer
如果你有一个方法返回一个字符串,你知道它的结果 无论如何总是会附加到StringBuffer,改变你的 签名和实现,以便函数执行追加 直接而不是创建一个短暂的临时对象。
http://developer.android.com/training/articles/perf-tips.html#ObjectCreation
答案 3 :(得分:1)
我不会打扰一个很长的答案,要么像某人说的那样使用格式,要么使用经常被忽略的StringBuffer
- 我在将大量String
连接在一起时使用,比如循环,哪里使用格式是不可能的。
http://developer.android.com/reference/java/lang/StringBuffer.html
(我喜欢Android的参考资料,因为它看起来与令人讨厌的甲骨文令人讨厌的那个相比:P)
答案 4 :(得分:1)
将此声明为全局静态变量
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();