1.异常原因:
网上很多出现并发修改异常的情况都是和集合有关,而我的情况是在将Activity清除出栈的时候出现的异常,其他的情况暂未遇到,碰到再更新。
2.分析解决:
我在之前的《 如何在本Activity页面退出后回到首页或者指定的Activity入口》中提到会出现并发修改异常的情况:我从A 主页--> B --> C --> D 页面,当想结束当前页面,直接回到A页面时,就需要将B、C 清除出任务栈,但在清除时若只是finish当前页面显然是不能直接回到A页面的,直接跳转的方式更不可取,会出现很多个Activity,造成很多问题。用我在该文内的工具类时,必须按顺序先清除C,再清除B;若中间BC不清,或者只有C忘记清除的情况下都会造成异常 java.util.ConcurrentModificationException。(注:这里只是举个例子,这样操作就会造成并发修改异常。)
3.个人理解(此部分仅供参考,纯属个人经验之谈,未必准确。):
以上造成并发修改异常的原因主要与activity的任务栈有关(具体任务栈原理,请大家自行找资料学习)。根据任务栈“后进先出”的特点,D处在当前任务栈的栈顶,想找到A,必须按顺序清除中间的C、B;不能跳过B、C直接找到A,更不可能跳过C去直接清除B。对任务栈内的元素进行操作,需理解其原理,根据其特点进行添加或者删除操作,避免发生类似的异常java.util.ConcurrentModificationException。
4.出现异常的部分代码示例:(示例全部代码)
/** * @author 诺诺 * */ public class EActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AppManager.getAppManager().addActivity(this); TextView tv = (TextView) findViewById(R.id.tv); tv.setText("返回首页"); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AppManager.getAppManager().finishActivity(DActivity.class); // AppManager.getAppManager().finishActivity(CActivity.class); AppManager.getAppManager().finishActivity(BActivity.class); finish(); } }); } }