0

我有一个每隔几百毫秒发送一次更新的服务。我有一个字符串,每次都会创建一个带有事件描述的字符串(“经过的时间是 32 秒”)。不幸的是,我不能只使用整数,因为内容可能会根据事件而改变(通常是相同的事件类型),并且反馈会返回给用户。有没有一种方法可以静态重用相同的字符串,这样每分钟就不会分配 100 次字符串?即使我重用相同的变量,即:

mEventUpdate = "Time elapsed is " + time + " seconds"; 

我仍然看到很多字符串分配。

4

5 回答 5

2

至少您可以使用String.format()来减少创建对象的数量:

mEventUpdate = String.format("Time elapsed is %d seconds", time); 
于 2013-09-18T11:02:40.047 回答
1

Java 中的AString是不可变对象。一旦创建,您将无法再更改它。因此,如果它真的必须是String,就没有办法避免分配。

于 2013-09-18T11:01:25.753 回答
1

使用字符串缓冲区

如果您有一个返回字符串的方法,并且您知道无论如何它的结果将始终附加到 StringBuffer,请更改您的签名和实现,以便该函数直接执行附加,而不是创建一个短暂的临时对象。

http://developer.android.com/training/articles/perf-tips.html#ObjectCreation

于 2013-09-18T11:06:06.853 回答
1

我不会为冗长的答案而烦恼,要么像有人说的那样使用格式,要么使用经常被忽视的StringBuffer- 我在将大量Strings 连接在一起时使用,比如在一个循环中,使用格式是不可能的。

http://developer.android.com/reference/java/lang/StringBuffer.html

(我喜欢 Android 的参考,因为它与那个讨厌的甲骨文的讨厌的相比:P)

于 2013-09-18T11:06:10.787 回答
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();
于 2013-09-18T11:55:50.367 回答