Android 11仅FragmentManager崩溃-FragmentManager已被破坏

问题描述

是否有人注意到Android 11上的生命周期发生了明显变化?

我的应用程序在Android 11之前的操作系统上运行良好,但在Pixel 4上每次都崩溃并显示以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment host has been destroyed

有没有人发现其他任何东西会影响他们在Android 11上的应用?

我正在使用不同的文件进行活动和片段。

我有一个TreasureHuntActivity会调用onCreate:

val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container,TreasureHuntMapFragment.newInstance(),"map-${index}").addToBackStack("map-${index}").commit()
fragmentManager.executePendingTransactions()

TreasureHuntMapFragment中调用

val intent = Intent(context,MainUnityActivity::class.java)
activity.startActivityForResult(intent,33)
Handler().postDelayed({ activity.pushQuestionHintFragment() },1000)

返回TreasureHuntActivity并调用TreasureHuntQuestionHintFragment显示

fun pushQuestionHintFragment() {
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container,TreasureHuntQuestionHintFragment.newInstance(),"questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}").commitAllowingStateLoss()
fragmentManager.executePendingTransactions()
}

这可以在Android 11之前的版本上正常运行,因为它在11+上现在无法正常运行。经过进一步的调试,它显示fragmentManager为null,之前已声明为null var fragmentManager = supportFragmentManager 全球TreasureHuntActivity

如果我在Pixel 2(Android的早期版本)上进行调试,则fragmentManager不为null,而是BackStackEntry

我曾尝试将生命周期或片段的格律更新为2.2.0或2.3.0-alpha07,将其更新为1.3.0,但仍然没有任何乐趣。

在调用fragmentManager时,pushQuestionHintFragment()仅在Android 11运行时为null。如果我进行调试,则this.isDestroyed也适用,但仅适用于Android 11。

解决方法

使用supportFragmentManager代替fragmentManager

fun pushQuestionHintFragment() {
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(
                R.id.container,TreasureHuntQuestionHintFragment.newInstance(),"questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}")
                       .commitAllowingStateLoss()
    supportFragmentManager.executePendingTransactions()
 }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...