Status Update
Comments
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #2
reemission of the same liveData is racy
jb...@google.com <jb...@google.com> #3
jb...@google.com <jb...@google.com> #4
na...@google.com <na...@google.com> #5
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
mo...@gmail.com <mo...@gmail.com> #6
ah...@gmail.com <ah...@gmail.com> #7
I actually have a WIP fix for it:
if your case is the one i found (emitting same LiveData multiple times, as shown in #5) you can work around it by adding a dummy transformation.
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData.map {it })
emitSource(subLiveData.map {it} )
}
il...@google.com <il...@google.com> #8
Branch: androidx-master-dev
commit af12e75e6b4110f48e44ca121466943909de8f06
Author: Yigit Boyar <yboyar@google.com>
Date: Tue Sep 03 12:58:11 2019
Fix coroutine livedata race condition
This CL fixes a bug in liveData builder where emitting same
LiveData source twice would make it crash because the second
emission registry could possibly happen before first one is
removed as source.
We fix it by using a suspending dispose function. It does feel
a bit hacky but we cannot make DisposableHandle.dispose async
and we do not want to block there. This does not mean that there
is a problem if developer disposes it manually since our emit
functions take care of making sure it disposes (and there is
no other way to add source to the underlying MediatorLiveData)
Bug: 140249349
Test: BuildLiveDataTest#raceTest_*
Change-Id: I0b464c242a583da4669af195cf2504e2adc4de40
M lifecycle/lifecycle-livedata-ktx/api/2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/current.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
M lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
M lifecycle/lifecycle-livedata-ktx/src/test/java/androidx/lifecycle/BuildLiveDataTest.kt
ma...@zentity.com <ma...@zentity.com> #9
Still persist in 2.6.0. From Crashlytics report:
Fatal Exception: java.lang.IllegalArgumentException: The fragment MyFragment{e08e9e3} (ffd3a63d-e7c5-4d27-8836-9579f2aea852 id=0x7f0a03a2 tag=0dcc6840-37be-40d3-9aab-10a5381ca884) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
at androidx.navigation.fragment.FragmentNavigator$onAttach$2.onBackStackChangeCommitted(FragmentNavigator.kt:143)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1918)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7879)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1009)
MyFragment is in main fragment for subgraph which is included to nav_graph.xml.
ma...@zentity.com <ma...@zentity.com> #11
Re
ti...@persgroep.net <ti...@persgroep.net> #12
Please re-open.
Issue still persists.
I can reproduce the issue in a private project.
Issue is introduced between 2.6.0-alpha09 and 2.6.0-beta01
We navigate using the navigator#navigate(route: String, navOptions: NavOptions? = null, navigatorExtras: Navigator.Extras? = null)
After a callback from BottomNavigationView#setOnItemSelectedListener { }
pe...@gmail.com <pe...@gmail.com> #13
Issue still persists.
Issue is introduced version 2.6.0
java.lang.IllegalArgumentException: The fragment Fragment{fc34355} (39232ee3-331e-46a0-af93-ba6b5333073c id=0x7f0a0080 tag=221aaf28-4a64-4790-8a9d-982050604bf8) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
at androidx.navigation.fragment.FragmentNavigator$onAttach$2.onBackStackChangeCommitted(FragmentNavigator.kt:143)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1918)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
ma...@gmail.com <ma...@gmail.com> #14
I have this problem as well in PreferenceScreen, when using 2.6.0, no problems in 2.5.3.
I expected it to be able to use "app:fragment=" parameter to navigate when clicking on the preference.While it showed this errors.
java.lang.IllegalArgumentException: The fragment LibrarySettingsNavFragment{e8a45e3} (e3ae8f01-4d4b-4f1f-8fd1-df0fb58c3764 id=0x7f0a040d) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
at androidx.navigation.fragment.FragmentNavigator$onAttach$2.onBackStackChangeCommitted(FragmentNavigator.kt:143)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1918)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1839)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
il...@google.com <il...@google.com> #15
Re
You might consider using OnPreferenceStartFragmentCallback
ma...@gmail.com <ma...@gmail.com> #16
Re onPreferenceStartFragment is not implemented...
)
I will consider the new approach you have brought up. Thanks for the reply and the information!
ap...@google.com <ap...@google.com> #17
Branch: androidx-main
commit f61da31809827bfac89af629c88ad9b8423e88b6
Author: Clara Fok <clarafok@google.com>
Date: Wed Sep 06 14:14:11 2023
Fix entry not marked complete after view is destroyed
As part of a fix for
Now the backstack check in ON_DESTROY is no longer necessary to fix the original
Test: ./gradlew navigation:navigation-fragment:cC
Test: ./gradlew navigation:navigation-runtime:cC
Bug: 288520638
Change-Id: I5caa9af1b5bd7084e76d7daf9515f7430bf2489d
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorTest.kt
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
na...@google.com <na...@google.com> #18
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-fragment:2.7.3
androidx.navigation:navigation-runtime:2.7.3
pa...@gmail.com <pa...@gmail.com> #19
jb...@google.com <jb...@google.com> #20
Please file an issue with a minimal sample project that reproduces your issue with 2.7.3.
pa...@gmail.com <pa...@gmail.com> #21
be...@gmail.com <be...@gmail.com> #22
dieser Fehler tritt bei mir auf wenn ich .beginTransaction().addToBackStack(null) hinzufüge.
Vielleicht hilft das bei der Fehlersuche.
Gruß Wauzi
sa...@googlemail.com <sa...@googlemail.com> #23
ro...@gmail.com <ro...@gmail.com> #24
lo...@gmail.com <lo...@gmail.com> #25
Still facing this issue with 2.7.4
tp...@fundrise.com <tp...@fundrise.com> #26
vi...@gmail.com <vi...@gmail.com> #27
ag...@gmail.com <ag...@gmail.com> #28
ad...@gmail.com <ad...@gmail.com> #29
na...@google.com <na...@google.com> #30
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-fragment:2.8.0-alpha01
androidx.navigation:navigation-runtime:2.8.0-alpha01
an...@nine-yi.com <an...@nine-yi.com> #31
ex : findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToNavSearch())
ne...@novo.co <ne...@novo.co> #32
Using the below library version and getting the same issue.
Fatal Exception: java.lang.IllegalArgumentException The fragment QuestionsFragment{c0772b4} (a73d416f-c5b6-444c-add0-8e1b5d151331 id=0x7f0a0cf4 tag=22f1b453-8116-4697-ae6b-3dffab63b52c) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
androidx.navigation:navigation-fragment-ktx:2.7.7
androidx.navigation:navigation-ui-ktx:2.7.7
al...@gmail.com <al...@gmail.com> #33
Is navigation 2.8.0 going to be released soon?
wr...@gmail.com <wr...@gmail.com> #34
Using the below library version and getting the same issue.
Fatal Exception: java.lang.RuntimeException: Unable to pause activity {com.yenaly.han1meviewer/com.yenaly.han1meviewer.ui.activity.MainActivity}: java.lang.IllegalArgumentException: The fragment DownloadFragment{7c97732} (b82e8cc8-7667-4bb5-9fba-6afb0477513d) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:5711)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:5662)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:5614)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:55)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:185)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:255)
at android.os.Looper.loop(Looper.java:364)
at android.app.ActivityThread.main(ActivityThread.java:8979)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:572)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1053)
Caused by java.lang.IllegalArgumentException: The fragment DownloadFragment{7c97732} (b82e8cc8-7667-4bb5-9fba-6afb0477513d) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
at androidx.navigation.fragment.FragmentNavigator$onAttach$2.onBackStackChangeCommitted(FragmentNavigator.kt:208)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2185)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2112)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2049)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3324)
at androidx.fragment.app.FragmentManager.dispatchPause(FragmentManager.java:3252)
at androidx.fragment.app.Fragment.performPause(Fragment.java:3323)
at androidx.fragment.app.FragmentStateManager.pause(FragmentStateManager.java:692)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:318)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:114)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1684)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3316)
at androidx.fragment.app.FragmentManager.dispatchPause(FragmentManager.java:3252)
at androidx.fragment.app.FragmentController.dispatchPause(FragmentController.java:296)
at androidx.fragment.app.FragmentActivity.onPause(FragmentActivity.java:284)
at android.app.Activity.performPause(Activity.java:8986)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1676)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:5701)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:5662)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:5614)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:55)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:185)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:255)
at android.os.Looper.loop(Looper.java:364)
at android.app.ActivityThread.main(ActivityThread.java:8979)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:572)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1053)
androidx.navigation:navigation-fragment-ktx:2.8.2
androidx.navigation:navigation-ui-ktx:2.8.2
il...@google.com <il...@google.com> #35
Re
yu...@rakuten.com <yu...@rakuten.com> #36
So
Description
Component used: Navigation
Version used: 2.6.0-beta01, 2.6.0-SNAPSHOT
Devices/Android versions reproduced on: All devices
Related issue https://issuetracker.google.com/issues/279306628
Project has 1 main graph that includes 3 sub nav graphs, each sub graph with a single fragment with a button.
Navigation flow.
Crash doesn't occur 2.6.0-alpha09 and below. Or if navigation doesn't happen within onResume callback by moving navigation call to button click.
Scenario is the top level fragment triggered a fragment result state back to bottom fragment after performing some business logics.