通过迭代自定义位置对象的ArrayList创建GPX字符串

时间:2012-10-05 11:23:31

标签: java android android-asynctask iteration

问题

我目前正在通过迭代一个名为'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'。

问题

有没有更有效的方法来做到这一点,不会那么费时?

非常感谢任何帮助。

1 个答案:

答案 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倍。