java如何在Android中处理ConcurrentModificationException
我正在尝试从ArrayList
中删除项目有时它会弹出一个异常,java.util.ConcurrentModificationException
首先,我试图通过array_list_name.remove(i)
删除它们,但失败了,一些人被要求使用迭代器。所以我现在的代码如下:
for (Iterator<Collectable> iter = array_list_name.iterator(); iter.hasNext();) {
Collectable s = iter.next();
if (s.equals(array_list_name.get(id))){
iter.remove();
return true;
}
}
我在视图中调用array_list_name
内onDraw()
函数。我的观点是SurfaceView
。有谁能建议我如何从ArrayList
中删除项目而不出现此错误吗
# 1 楼答案
尝试使用
java.util.concurrent.CopyOnWriteArrayList
而不是ArrayList
# 2 楼答案
从评论中可以看出,UI从一个线程中的
ArrayList<Collectable>
方法访问onDraw()
,同时您从另一个线程中删除项目那么,为什么不把两个访问器都打包成一个
请注意,如果删除项目需要很长时间,这可能会导致UI滞后。如果是这种情况,请考虑将要删除的所有项索引列表,并在遍历整个列表之后以紧密同步的循环将它们移除。
更新
在我看来,您的整个代码片段可以简化为: