AndroidUtilCode icon indicating copy to clipboard operation
AndroidUtilCode copied to clipboard

FragmentManager is already executing transactions

Open wankey opened this issue 3 years ago • 4 comments

FragmentManager is already executing transactions

在commitid:28f24faf597ef92771d97780eac7d8e69ad145a4 中对FragmentUtils第1528行处增加了一行 fm.executePendingTransactions(); 之后,特定常见出现FragmentManager is already executing transactions异常崩溃,退回1.30.5版本就不会崩溃

  • AndroidUtilCode 的版本:1.30.6
  • 出现 Bug 的设备型号:HUAWEI MATE30 pro
  • 设备的 Android 版本:API 30

验证demo

class TestActivity : AppCompatActivity(R.layout.activity_test), Test1Fragment.OnInteractionListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        FragmentUtils.replace(supportFragmentManager, Test1Fragment(), R.id.container_1)
    }

    override fun showComments() {
        FragmentUtils.replace(supportFragmentManager, Test2Fragment(), R.id.container_2)
    }
}


class Test1Fragment : Fragment(R.layout.fragment_test1) {
    var listener: OnInteractionListener? = null

    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is OnInteractionListener) {
            listener = context
        }
    }

    override fun onResume() {
        super.onResume()
        listener?.showComments()
    }

    interface OnInteractionListener {
        fun showComments()
    }
}

class Test2Fragment : Fragment(R.layout.fragment_test2)

异常堆栈

 Caused by: java.lang.IllegalStateException: FragmentManager is already executing transactions
        at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1919)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1984)
        at androidx.fragment.app.FragmentManager.executePendingTransactions(FragmentManager.java:600)
        at com.blankj.utilcode.util.FragmentUtils.operate(FragmentUtils.java:1529)
        at com.blankj.utilcode.util.FragmentUtils.replace(FragmentUtils.java:1158)
        at com.blankj.utilcode.util.FragmentUtils.replace(FragmentUtils.java:802)

wankey avatar Mar 10 '21 10:03 wankey

+1

ithomasoft avatar May 25 '21 15:05 ithomasoft

+1

zhifeiji1994 avatar Jul 06 '21 02:07 zhifeiji1994

+1 现在google要求强制适配Android 11了,所以util也需要升级,不升级谈不出来提示,升级但是FragmentUtil会导致闪退,大佬速度更新啊,哪怕回滚呢。

1wayticket avatar Oct 28 '21 08:10 1wayticket

+1

qq549631030 avatar Dec 30 '21 09:12 qq549631030