java.util.ConcurrentModificationException

在跑home的monkey时出现异常java.util.ConcurrentModificationException。相关的log如下:

 

E/AndroidRuntime(457): Caused by: java.util.ConcurrentModificationException
E/AndroidRuntime(457): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
E/AndroidRuntime(457): at com.c35.mtd.calendar.ctrl.CalendarView.doDraw(CalendarView.java:336)
E/AndroidRuntime(457): at com.c35.mtd.calendar.ctrl.CalendarView.onDraw(CalendarView.java:123)

 

出错地方的代码:

for (CalendarInfo ci : mDaysOfMonth) {
……
}

mDaysOfMonth是一个ArrayList,循环体中间没有add和remove的动作。

 

问题可能的原因:

for-each实质上是使用迭代器

 

解决方法:

改用for循环。

CalendarInfo ci = new CalendarInfo();
for (int i = 0, N = mDaysOfMonth.size(); i < N; i++) {
  ci = mDaysOfMonth.get(i);
  if (ci == null) return;    //避免数据被其它线程给删除,导致崩溃

……
}

或者加个锁

synchronized (mDaysOfLastMonth) {
  for (CalendarInfo ci : mDaysOfLastMonth) {
  。。。
  }
}

posted @ 2011-12-31 10:18  天南星客  阅读(1163)  评论(0编辑  收藏  举报