Status Update
Comments
le...@gmail.com <le...@gmail.com> #2
Oh I forgot to mention that I thought it might be connected to this issue:
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #3
Please provide a minimal sample project along with the minimal steps to recreate the issue in the project.
jb...@google.com <jb...@google.com> #4
Sorry for the delay. I got a working example here:
I poked into it a little bit and it seems to be connected to
Steps to reproduce:
- Navigate from Second Fragment to Child nav graph (with non-nullable parameters).
- Navigate to Third fragment using SafeArgs and the app crashes.
Crash log:
Process: cz.dels.issues, PID: 1743
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Long
at androidx.navigation.NavType$Companion$LongType$1.get(NavType.kt:352)
at androidx.navigation.NavType$Companion$LongType$1.get(NavType.kt:342)
at androidx.navigation.NavArgument.verify(NavArgument.kt:76)
at androidx.navigation.NavDestination.addInDefaultArgs(NavDestination.kt:502)
at androidx.navigation.NavController.addEntryToBackStack(NavController.kt:1865)
at androidx.navigation.NavController.addEntryToBackStack$default(NavController.kt:1813)
at androidx.navigation.NavController$navigate$4.invoke(NavController.kt:1721)
at androidx.navigation.NavController$navigate$4.invoke(NavController.kt:1719)
at androidx.navigation.NavController$NavControllerNavigatorState.push(NavController.kt:287)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.kt:246)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.kt:162)
at androidx.navigation.NavController.navigateInternal(NavController.kt:260)
at androidx.navigation.NavController.navigate(NavController.kt:1719)
at androidx.navigation.NavController.navigate(NavController.kt:1545)
at androidx.navigation.NavController.navigate(NavController.kt:1472)
at androidx.navigation.NavController.navigate(NavController.kt:1930)
at cz.dels.issues.SecondFragment.onViewCreated$lambda-0(SecondFragment.kt:38)
at cz.dels.issues.SecondFragment.$r8$lambda$XDYnOS_cYrafiNQ5rcCu1WCn0IE(Unknown Source:0)
at cz.dels.issues.SecondFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
Note: If in step 2 SaveArgs is not used then navigation works correctly. More information is here:
Description
The
MainActivity
gets leaked after the second time the orientation changes, but only after navigating to a new destination using thenavHostController
.A working project where this can be reproduced is available here .
These are the reproduction steps:
FooScreen
, that only contains aTopAppBar
and aButton
).Button
(it will load theBarScreen
, that only contains aTopAppBar
)At this point you should see
StrictMode
complaining about the leak inside the logcat:The LeakCanary notification should also be visible . This is the LeakCanary log:
Things I have noticed:
adb shell am start -d "template://bar" -a android.intent.action.VIEW
)I've also tried to use the Android Studio Profiled to investigate the leak, but I wasn't really successful. Here some screenshots:
This is the overview of the modules of the repro project: enter image description here
In short, the App only has the single Activity with no logic beside setting up the nav host. The navigation logic is inside the
core-navigation
. Each feature module provides UI and business logic. Currently there are 3 features with 1 screen each: Foo, Bar and Debug. Foo screen has only one button that leads to Bar screen. The leak happens inside Bar screen, if you rotate the device twice. It does not happen if you access Bar via Deeplink.