Android Java字符串创建';最便宜的&x27;方式
我有一个runnable,它在屏幕上不断更新字符串值,一个列表中可能有10个项目,所有这些项目每秒都在更新它们的值。它基本上是一个同时运行的秒表列表。下面的方法有三种不同的方法来生成字符串:Android Java字符串创建';最便宜的&x27;方式,java,android,string,memory,Java,Android,String,Memory,我有一个runnable,它在屏幕上不断更新字符串值,一个列表中可能有10个项目,所有这些项目每秒都在更新它们的值。它基本上是一个同时运行的秒表列表。下面的方法有三种不同的方法来生成字符串: private void setTime() { long now = System.currentTimeMillis() / 1000L; long difference = now - startTime; // METHOD 1 String conc = Str
private void setTime() {
long now = System.currentTimeMillis() / 1000L;
long difference = now - startTime;
// METHOD 1
String conc = String.format("%02d:%02d:%02d", difference / 3600, (difference % 3600) / 60, difference % 60);
// METHOD 2 (not finished)
StringBuilder sb = new StringBuilder(8);
sb.append(difference/3600).append((difference % 3600 /60)).append(difference % 60);
// METHOD 3
String timeAsText = new SimpleDateFormat("HH:mm:ss")
.format(new Date(difference * 1000));
}
所有这些方法都有效,但在观察内存的同时,对每种方法执行相同的测试,并将其保留10分钟后,每种方法的分配继续增加
方法1-分配的内存增加了大约5MB-6MB
方法2-分配的内存增加了大约3MB
方法3-分配的内存增加了约6MB
仅仅10分钟后,这并不理想,我已经尝试跟踪内存分配,问题肯定是创建字符串
我该怎么做才好?我可以使用什么方法将内存分配保持在最小?更好的是,我能做些什么来阻止记忆不断上升?(顺便说一句,这肯定是一个新问题,取出它可以阻止泄漏)当
String
值不断变化时,会重新开始使用StringBuilder
,因为它是可变的。(即,当您更改值时,它不会创建新对象)因此您的方法2是好的。20分钟后会发生什么?内存消耗增加了两倍?@PragnaniKinnera,这对他没有帮助。我打赌他想在某个时候将其写入TextView,因此他需要构建字符串。在这一点上,它是不可变的。如果你说的是不断追加数据,你的建议就更正确了。字符串是不可变的,所以我投票支持StringBuilder
解决方案。@Foxinsocks它将是双重肯定。字符串生成器选项的增长速度约为每分钟0.3MB。