Android 11(仅)FragmentManager 崩溃 - FragmentManager 已被销毁

joe*_*ate 5 android android-fragments android-activity kotlin android-11

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

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

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment host has been destroyed
Run Code Online (Sandbox Code Playgroud)

是否有任何其他人注意到会影响他们在 Android 11 上的应用?

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

我有一个TreasureHuntActivity调用 onCreate:

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

TreasureHuntMapFragment它调用

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

回到TreasureHuntActivity它调用TreasureHuntQuestionHintFragment显示

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

这适用于 Android 11 之前的版本,它可以完美运行,如前所述,它现在不适用于 11+。随着进一步调试,它显示fragmentManager为空,之前 var fragmentManager = supportFragmentManagerTreasureHuntActivity

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

我已经尝试将生命周期或片段的规范更新为 2.2.0 或 2.3.0-alpha07 为 1.3.0,但仍然没有任何乐趣。

fragmentManager是打电话时只在Android运行11空pushQuestionHintFragment()。如果我调试,this.isDestroyed也是如此,但仅限于 Android 11。

小智 0

使用supportFragmentManager而不是fragmentManager

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