需要增强android mapview叠加层

时间:2011-10-27 08:13:35

标签: android multithreading android-mapview

我正在尝试运行一个特定的代码,定期在地图上添加/删除标记,我尝试了AsyncTask方法而不是线程和runnable,

doInBackground中的

mapView.getOverlays.remove()
mapView.getOverlays.addOverlay(new overlay)
mapView.getController.animate(center point)

实际问题是,该代码连续运行,并且执行map时会执行渲染并尝试绘制叠加层,而代码正在删除并添加到列表中,因此抛出ConcurrentModificationException并且应用程序暂停

我需要帮助,我觉得我走错了路,在尝试在后台线程中运行代码时,我应该使用什么才能在地图上定期更新标记?

2 个答案:

答案 0 :(得分:1)

UI不是线程安全的,因此您不能从非主线程更新ui组件。 AsyncTask有从主线程调用的方法。我们的想法是准备doInBackgraound中的所有数据,然后使用postExecute方法更新用户界面。

答案 1 :(得分:0)

如果您不想像s korolev建议那样将所有点一起渲染,请使用UI处理程序机制。


Handler myHandler = new Handler() {  
publicvoid handleMessage(Message msg) {   
switch (msg.what) {   
case TestHandler.NEW_OVERLAY_ITEM_EVENT:   
mapView.getOverlays.remove()
mapView.getOverlays.addOverlay(new overlay)
mapView.getController.animate(center point)  
break;   
               }   
super.handleMessage(msg);   
          }   
     }; 

// post this UI update event 
Message message = new Message();   
message.what = TestHandler.NEW_OVERLAY_ITEM_EVENT;       
TestHandler.this.myHandler.sendMessage(message);