【发布时间】:2016-06-16 06:42:23
【问题描述】:
我有时会从以下代码中得到以下异常 人们建议,如果我对迭代器进行 for 循环,它将解决问题。但我不明白如果我没有删除 for 循环内的任何元素而是调用 pendingActions.clear();之后。 请让我知道是否有人遇到过这种情况。 另外,如果我向
private List<Action> pendingActions = Collections.synchronizedList(new ArrayList<>());
会解决问题吗?
private List<Action> pendingActions = new ArrayList<>();
private void runPendingNavigationActions() {
if (!pendingActions.isEmpty()) {
for (Action r : pendingActions) {
r.run();
}
pendingActions.clear();
}
}
例外:
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4156)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
at com.app.android.view.fragment.MainFragment.runPendingNavigationActions(MainFragment.java:1355)
【问题讨论】:
-
是否有任何
Action在其run()方法中将自己从列表中删除? -
不,run 不会从列表中删除,但在某些竞争条件下,以下代码会在循环迭代时执行 /** * 确保仅在 onReusme 和 onPause 之间执行操作,否则在应用程序恢复后暂停它们以运行。 */ private void runNavAction(Action action) { if (!canCommitFragmentTransaction) { pendingNavActions.add(action); } 其他 { action.run(); } }
-
这个问题你解决了吗?如果没有,请将
run()方法的内容发布到您的Action类中 -
尚未修复,但我没有触摸运行方法中的列表
-
@Bulu 如果该代码同时运行,则可以解释问题。为什么该代码在另一个线程中运行?这些
Actions 是什么?