Android并发修改异常:java.util.ConcurrentModificationException
Android并发修改异常:java.util.ConcurrentModificationException
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();
}
});
}
}
————————————————
版权声明:本文为CSDN博主「Promise Sun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sun_promise/article/details/43704515
更多相关文章
- Android(安卓)应用安装过程分析
- 使用mapbar 地图sdk要关闭硬件加速
- Android开发05—Android常用高级控件(下)
- 初识Android(安卓)制作一个简单的记账本
- Android中对多媒体操作阶段总结
- Android里webviewActivity一般功能实现
- [转]Android中Matrix的pre post set方法理解
- 【Android不太基础】换个思路来监听home键
- Android(安卓)Jetpack - 使用 Navigation 管理页面跳转