如何解决FATAL EXCEPTION:Android中的Timer-11?

时间:2011-01-05 07:05:39

标签: android

这是异常::

的代码
if (getZoomLevel() != last_zoom)
 {
 // if computeScroll called before timer counts down we should drop it and start it over again
   zoom_event_delay_timer.cancel();
   zoom_event_delay_timer = new Timer();
   Log.v("last_zoom","last_zoom");
  zoom_event_delay_timer.schedule(new TimerTask()
  {
   @Override
  public void run()
  {
      zoom_change_listener.onZoomChange(_this, getZoomLevel(), last_zoom);
       Log.v("last_zoom","last_zoom"+last_zoom);
       last_zoom = getZoomLevel();
       Log.v("last_zoom","last_zoom");
   }
  }, events_timeout);
}

和错误:

01-05 12:24:50.791: ERROR/AndroidRuntime(11132): FATAL EXCEPTION: Timer-11
    01-05 12:24:50.791: ERROR/AndroidRuntime(11132): java.util.ConcurrentModificationException
    01-05 12:24:50.791: ERROR/AndroidRuntime(11132):     at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
    01-05 12:24:50.791: ERROR/AndroidRuntime(11132):     at com.bluepal.android.parkable.Prakablescreen.onRegionChange(Prakablescreen.java:1028)
    01-05 12:24:50.791: ERROR/AndroidRuntime(11132):     at com.bluepal.android.parkable.Prakablescreen$14.onPanChange(Prakablescreen.java:467)
    01-05 12:24:50.791: ERROR/AndroidRuntime(11132):     at com.bluepal.android.parkable.EnhancedMapView$2.run(EnhancedMapView.java:126)
    01-05 12:24:50.791: ERROR/AndroidRuntime(11132):     at java.util.Timer$TimerImpl.run(Timer.java:289)

3 个答案:

答案 0 :(得分:1)

请提供一些源代码。

从错误中看,你试图在迭代时修改一个arraylist。如果是这种情况,请使用arraylist&的临时容器。在所有修改之后,将此临时arraylist存储到您的arraylist。

答案 1 :(得分:1)

这里的问题似乎是你从另一个线程(在这种情况下是定时器)调用UI线程。 我找到了these sites来解释和解决问题(我使用了处理程序)。

答案 2 :(得分:0)

  

从错误中看来你似乎是   试图修改一个arraylist而   迭代它

如果100rabh是正确的并且你没有通过迭代器修改你的列表,也许你可以使用CopyOnWriteArrayList,这是ThreadSafe。