我的应用程序存在大量内存问题。我想我的位图已经整理好了,我目前的问题似乎源于Strings。我有两个经常发生的功能,需要确保它们是可靠的。
首先是将输入流转换为字符串。
第二个是在媒体播放器中格式化计时器显示。这种情况每秒都会发生
这些功能是否存在明显的低效问题?感谢
**编辑,快速编辑了maketimestring,因为我发现了一个显而易见的缺点,我每次都在从资源中提取字符串。
private static StringBuilder sBuilder = new StringBuilder();
private static Formatter sFormatter = new Formatter(sBuilder, Locale.getDefault());
private static final Object[] sTimeArgs = new Object[5];
public static String makeTimeString(String durationFormat, long secs) {
sBuilder.setLength(0);
final Object[] timeArgs = sTimeArgs;
timeArgs[0] = secs / 3600;
timeArgs[1] = secs / 60;
timeArgs[2] = (secs / 60) % 60;
timeArgs[3] = secs;
timeArgs[4] = secs % 60;
return sFormatter.format(durationformat, timeArgs).toString();
}
public static String formatContent(InputStream is) throws IOException {
if (is == null)
return "";
sBuilder.setLength(0);
BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = buffer.readLine()) != null) {
sBuilder.append(line).append("\n");
}
buffer.close();
buffer = null;
return sBuilder.toString().trim();
}
答案 0 :(得分:0)
将StringBuilder保持为类变量意味着其内部缓冲区在类的生命周期内保持分配状态。除非你需要将字符数据作为StringBuilder和String,否则每次调用时都应该在formatContent()内部创建一个新的StringBuilder作为局部变量。或者,如果您可以使用CharSequence而不是String,并且只使用StringBuilder而不是构造String。 (当然,如果您必须将其传递给控件之外的需要String的API,那么这不起作用。)