AppNavigator applyCommandsSync
lUjek-Sh opened this issue · 5 comments
Cicerone Version: 7.0
I keep getting an error related to applyCommandsSync.
Fatal Exception: java.lang.IllegalStateException: FragmentManager has been destroyed
at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1936)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1996)
at androidx.fragment.app.FragmentManager.executePendingTransactions(FragmentManager.java:600)
at com.github.terrakok.cicerone.androidx.AppNavigator.applyCommandsSync(AppNavigator.kt:34)
at org.desyatka.client.ui.activity.ParentActivity$navigator$1.applyCommandsSync(ParentActivity.kt:82)
at com.github.terrakok.cicerone.androidx.AppNavigator$applyCommands$1.run(AppNavigator.kt:29)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7660)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Lines of code from the AppNavigator file lines 27 to 46.
override fun applyCommands(commands: Array<out Command>) {
mainHandler.post {
applyCommandsSync(commands)
}
}
protected open fun applyCommandsSync(commands: Array<out Command>) {
fragmentManager.executePendingTransactions()
//copy stack before apply commands
copyStackToLocal()
for (command in commands) {
try {
applyCommand(command)
} catch (e: RuntimeException) {
errorOnApplyCommand(command, e)
}
}
}
My code in ParentActivity lines 78 to 85.
private val navigatorHolder = provideNavigatorHolder()
private val navigator: Navigator = object : AppNavigator(this, R.id.container_parent) {
override fun applyCommandsSync(commands: Array<out Command>) {
super.applyCommandsSync(commands) - this ParentActivity.kt:82
supportFragmentManager.executePendingTransactions()
}
}
What could be the problem?
override fun applyCommands(commands: Array) {
mainHandler.post {
applyCommandsSync(commands)
}
}
Run this on UI thread with using runOnUiThread(runnable);
The problem should get solved.
override fun applyCommands(commands: Array) {
mainHandler.post {
applyCommandsSync(commands)
}
}
Run this on UI thread with using runOnUiThread(runnable);
The problem should get solved.
Ok. I try this tomorrow.
override fun applyCommands(commands: Array) {
mainHandler.post {
applyCommandsSync(commands)
}
}
Run this on UI thread with using runOnUiThread(runnable);
The problem should get solved.
Your solution didn't help.
Fatal Exception: java.lang.IllegalStateException: FragmentManager has been destroyed
at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java)
at androidx.fragment.app.FragmentManager.executePendingTransactions(FragmentManager.java)
at com.github.terrakok.cicerone.androidx.AppNavigator.applyCommandsSync(AppNavigator.java)
at org.desyatka.client.ui.activity.ParentActivity$navigator$1.applyCommands$lambda-0(ParentActivity.java)
at org.desyatka.client.ui.activity.ParentActivity$navigator$1.lambda$yEVhX-TOAK8HRAEcgBlGOkQkqHg(ParentActivity.java)
at org.desyatka.client.ui.activity.-$$Lambda$ParentActivity$navigator$1$yEVhX-TOAK8HRAEcgBlGOkQkqHg.run(-.java)
at android.os.Handler.handleCallback(Handler.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
Cicerone Version 7.0
Приложение крашится в проде. В Firebase Crashlytics этот баг находится на первом месте по количеству крашей.
Fatal Exception: java.lang.IllegalStateException: FragmentManager has been destroyed
at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1936)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1996)
at androidx.fragment.app.FragmentManager.executePendingTransactions(FragmentManager.java:600)
at com.github.terrakok.cicerone.androidx.AppNavigator.applyCommandsSync(AppNavigator.java:34)
at com.github.terrakok.cicerone.androidx.AppNavigator$applyCommands$1.run(AppNavigator.java:29)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Приложение крашится в проде. В Firebase Crashlytics этот баг находится на первом месте по количеству крашей.
I use
private val navigator: Navigator = object : AppNavigator(this, R.id.container_parent){}
not use
override fun applyCommandsSync
it help me