问题
我目前正在通过迭代一个名为'CCTrackLocation'的自定义对象数组来创建一个gpx字符串。但是,这太慢了,特别是当有很多地方时。我也在异步任务中运行它。
这是我的代码。
for (CCTrackLocation location: trackLocations) {
//Log.e("CCGPXUtils", "Time wasting");
String amendedString = gpxString + "<trkpt lat=\""+location.getLatitude()+"\" lon=\""+location.getLongitude()+"\">\n" +
"<ele>"+location.getAltitude()+"</ele>\n" +
"<time>"+CCDateUtility.convertTimestampIntoGPXFormat(location.getTimestamp())+"</time></trkpt>\n";
gpxString = amendedString;
amendedString = null;
前500个左右的点转换得很好,之后我会在调试控制台中出现'GC_FOR_MALLOC'和'GC_CONCURRENT'。
问题
有没有更有效的方法来做到这一点,不会那么费时?
非常感谢任何帮助。
答案 0 :(得分:0)
可能是我找到的最简单的解决方案。
我不知道&#39; StringBuilder&#39;由于来自Objective-C背景,但它们是我问题的解决方案。
这是我更新的代码。
StringBuilder stringBuilder = new StringBuilder(gpxString);
for (CCTrackLocation location: trackLocations) {
if (isCancelled())
return null;
//Log.e("CCGPXUtils", "Time wasting");
stringBuilder.append("<trkpt lat=\""+location.getLatitude()+"\" lon=\""+location.getLongitude()+"\">\n" +
"<ele>"+location.getAltitude()+"</ele>\n" +
"<time>"+CCDateUtility.convertTimestampIntoGPXFormat(location.getTimestamp())+"</time></trkpt>\n");
}
return stringBuilder.toString();
<强>观察强>
表现增加了100倍。