我正在编写一个应用来跟踪谷歌地图v2上的动作。对于每个更改的位置,我将向我的数组添加一个新的地图点,然后在地图中添加折线。我也在sqlite数据库中保存位置。以下是相关代码:
LatLng mapPoint = new LatLng(location.getLatitude(), location.getLongitude());
routePoints.add(mapPoint);
Polyline route = map.addPolyline(new PolylineOptions().color(Color.BLUE).width(2));
route.setPoints(routePoints);
大约2000点后,应用程序在我的手机上没有响应。我不认为这是因为数组变得太大,因为当我从数据库中提取所有数据时(有时超过6000行),它遵循相同的逻辑并且绘制地图就好了(使用数组)。我想知道是不是因为我在主线程上运行了一切(音乐播放,谷歌地图,位置服务,数据库插入,textview更改等)。如果这是罪魁祸首,我应该如何改变这一点以将事物放在不同的线程中?什么应该在不同的线程?最后,我如何编写将这些内容移动到不同的线程(代码示例或指向我的资源)。
TIA
答案 0 :(得分:1)
理想情况下,您需要将不涉及UI的所有内容移动到其他线程中,尤其是网络和文件访问(例如数据库)代码。这可能是因为这里的千人减产造成的死亡。一些建议:
您可能希望按照上述顺序进行更改。
我真的不知道你想要完成什么,但这里有一个关于如何使用AsyncTask的大致概述:
private class LocationTask extends AsyncTask<Source, Integer, List<PolylineOptions>> {
protected Long doInBackground(Source... sources) {
List<PolylineOptions> list=new ArrayList<PolylineOptions>();
//create or retrieve Polyline objects here
return list;
}
protected void onProgressUpdate(Integer... progress) {
//don't need this if it's reasonably fast
}
protected void onPostExecute(List<PolylineOptions> result) {
for(PolylineOptions poly:result) {
map.addPolyline(poly);
}
}
}
要运行:new LocationTask().execute(source1, source2, source3);
Source
是用于为LocationTask提供执行其功能的任何数据结构