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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章