FragmentManager is already executing transactions only 2.0.0
NunciosChums opened this issue · 4 comments
1.0.0
works well. However, 2.0.0
causes an error. Code is same.
Language: kotlin
KPermissions version: 2.0.0
Android version: 8.0.0
Android device: Samsung Galaxy S7 edge
How to reproduce it: request any permission
Block of code:
// permissionsBuilder(Manifest.permission.CAMERA)
permissionsBuilder(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.build()
.onAccepted { startScan() }
.send()
Stack trace:
java.lang.RuntimeException: Unable to start activity ComponentInfo{kr.susemi99/kr.susemi99.ui.unlock.UnlockActivity}: java.lang.IllegalStateException: FragmentManager is already executing transactions
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.IllegalStateException: FragmentManager is already executing transactions
at androidx.fragment.app.FragmentManagerImpl.ensureExecReady(FragmentManagerImpl.java:1650)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1682)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:299)
at com.fondesa.kpermissions.request.runtime.FragmentRuntimePermissionHandlerProvider.provideHandler(FragmentRuntimePermissionHandlerProvider.kt:51)
at com.fondesa.kpermissions.builder.CompatPermissionRequestBuilder.createRequest(CompatPermissionRequestBuilder.kt:49)
at com.fondesa.kpermissions.builder.BasePermissionRequestBuilder.build(BasePermissionRequestBuilder.kt:66)
at kr.susemi99.ui.unlock.scan.UnlockScanFragment.requestPermission(UnlockScanFragment.kt:85)
at kr.susemi99.ui.unlock.scan.UnlockScanFragment.onActivityCreated(UnlockScanFragment.kt:53)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2633)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:897)
at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManagerImpl.java:2087)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1861)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1817)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1717)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2650)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2600)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2639)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:897)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1228)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1293)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2646)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2600)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1340)
at android.app.Activity.performStart(Activity.java:7200)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2920)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
I'll look into it as soon as possible, thanks.
For the moment downgrade to the version 1.0.0 if possible.
BTW have you an idea of how I can reproduce this bug?
my sample project is here https://github.com/susemi99/TestKPermissions
press GO TO SCAN
@susemi99 Thanks for the sample. I figured out the problem.
Apparently that behavior changed with AndroidX.
The fix is not so easy but I'm working on it.
I should replace the calls to FragmentTransaction#commitNow()
with FragmentTransaction#commit()
inside the library.
The consequences are pretty big on the internal usage of fragments.
I'll keep you up to date.
@susemi99 Fixed in version 2.0.1