java.lang.IllegalStateException: Fragment already added: MeFragment{71ca94e}

記錄一次關(guān)于底部導(dǎo)航切換的crash:Fragment already added。

觸發(fā):打開app,快速點(diǎn)擊底部按鈕切換fragment的時(shí)候 大概率會(huì)出現(xiàn)這個(gè)問題。
排查過程:出現(xiàn)這個(gè)crash的時(shí)候,一開始想到的便是在 supportFragmentManager.beginTransaction().add前判斷是否已經(jīng)添加過fragment.isAdded,查看代碼發(fā)現(xiàn)這個(gè)邏輯已經(jīng)存在...就有點(diǎn)意思了!然后通過日志發(fā)現(xiàn),確實(shí)是add了多次,經(jīng)過查閱知道commit執(zhí)行的是一個(gè)延時(shí)的異步操作,
Schedules a commit of this transaction. The commit does not happen immediately;
it will be scheduled as work on the main thread to be done the next time that thread is ready.

這樣就可能導(dǎo)致快速點(diǎn)擊的時(shí)候上次可能還沒commit完成,所以解決思路便是讓它立即執(zhí)行。

image.png

解決辦法:1.supportFragmentManager.executePendingTransactions()立即執(zhí)行 。這個(gè)是我自己采用的方式;
2.這個(gè)問題是在一個(gè)老項(xiàng)目中發(fā)現(xiàn)的,然后就順手看了一下自己近期新搭建的項(xiàng)目,是采用一打開app便把所有fragment先add進(jìn)去,這樣的話也不會(huì)出現(xiàn)這個(gè)crash,性能上硬考慮比較,那肯定還是1好一些!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容