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) {
。。。
}
}