【发布时间】:2015-05-16 12:08:41
【问题描述】:
我在I used synchronized list, and i still get ConcurrentModificationException 找到了同样的问题,但没有找到正确答案。
这是我定义我的synchronized 列表的方式:
private List<ActionItemClickListener> actionItemClickListeners = Collections.synchronizedList(new ArrayList<ActionItemClickListener>());
这是我的使用方法:
@Override
public void onBackPressed() {
boolean isConsume = false;
synchronized (actionItemClickListeners) {
//ConcurrentModificationException occur here
for (ActionItemClickListener listener : actionItemClickListeners) {
isConsume = isConsume | listener.onSystemBackPressed();
}
}
if(!isConsume) {
pendingFragment = null;
pendingTag = null;
currentFragmentTag = null;
super.onBackPressed();
}
}
public void addActionItemClickListener(ActionItemClickListener listener) {
synchronized (actionItemClickListeners) {
if (listener != null)
actionItemClickListeners.add(listener);
}
}
public void removeActionItemClickListener(ActionItemClickListener listener) {
synchronized (actionItemClickListeners) {
if (listener != null)
actionItemClickListeners.remove(listener);
}
}
为什么我仍然收到ConcurrentModificationException???
【问题讨论】:
-
你能告诉我们你从哪里得到异常吗?另外,
super.onBackPressed();是什么? -
@ReutSharabani,是一个android回调,当按下返回按钮时由操作系统调用
-
@ReutSharabani 我在代码中评论,
super.onBackPressed()是一个超级调用,我的类扩展自Activity类。 -
@mr.icetea 您是否尝试了常规的
for循环? stackoverflow.com/questions/2397321/… -
@ReutSharabani 看起来不错,我会试试的。感谢您的建议!
标签: java android concurrency thread-safety