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

记录一次关于底部导航切换的crash:Fragment already added。

触发:打开app,快速点击底部按钮切换fragment的时候 大概率会出现这个问题。
排查过程:出现这个crash的时候,一开始想到的便是在 supportFragmentManager.beginTransaction().add前判断是否已经添加过fragment.isAdded,查看代码发现这个逻辑已经存在...就有点意思了!然后通过日志发现,确实是add了多次,经过查阅知道commit执行的是一个延时的异步操作,
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.

这样就可能导致快速点击的时候上次可能还没commit完成,所以解决思路便是让它立即执行。

image.png

解决办法:1.supportFragmentManager.executePendingTransactions()立即执行 。这个是我自己采用的方式;
2.这个问题是在一个老项目中发现的,然后就顺手看了一下自己近期新搭建的项目,是采用一打开app便把所有fragment先add进去,这样的话也不会出现这个crash,性能上硬考虑比较,那肯定还是1好一些!

你可能感兴趣的:(java.lang.IllegalStateException: Fragment already added: MeFragment{71ca94e})