应用程序未从 Android NavGraph 的 Start Destination on App Hot Start 启动
App not starting from Start Destination of Android NavGraph on App Hot Start
我正在使用 Android 具有单个 activity、多个目的地的导航架构组件。我正在初始化 SplashFragment 中的一些静态变量,这是我的 NavGraph 的 "startDestination"。
但是我遇到了问题,当应用程序长时间处于后台时(可能一些内存被 Android OS 收回),由于这些静态变量中的一些(或单例 类) 重置了。当应用程序进入前台时,我期待我的 Activity 再次从 SplashFragment(开始目的地)开始,因为它是重新创建的(调用了 onCreate() 方法)。但由于某些导航保存状态机制,它是从最后一个目的地开始的。
我想知道如何在应用程序热启动期间清除导航状态,以便它从 Start Destination 启动。
我的第一个想法 是覆盖片段的 onStop( )
方法并从内部调用 navigateUp()
,前提是您为目标指定了 pop 操作想离开
另一件事 是清除保存有关您的导航历史数据的 Backstack,这可能是您 return 提到片段而不是开始的原因目的地。
我找到了解决这个问题的快速方法:
在 App Hot Start 期间,Activity.onCreate() 与 "savedInstanceState" 一起调用,其中还包含导航状态。就我而言,我不想保留任何东西。因此我简单地调用了 super.onCreate(null) 并且因此根本没有传递 "savedInstanceState" 变量。
我们还可以 alter/clear "savedInstanceState" 变量中一些我们不想恢复的状态。
我正在使用 Android 具有单个 activity、多个目的地的导航架构组件。我正在初始化 SplashFragment 中的一些静态变量,这是我的 NavGraph 的 "startDestination"。 但是我遇到了问题,当应用程序长时间处于后台时(可能一些内存被 Android OS 收回),由于这些静态变量中的一些(或单例 类) 重置了。当应用程序进入前台时,我期待我的 Activity 再次从 SplashFragment(开始目的地)开始,因为它是重新创建的(调用了 onCreate() 方法)。但由于某些导航保存状态机制,它是从最后一个目的地开始的。 我想知道如何在应用程序热启动期间清除导航状态,以便它从 Start Destination 启动。
我的第一个想法 是覆盖片段的 onStop( )
方法并从内部调用 navigateUp()
,前提是您为目标指定了 pop 操作想离开
另一件事 是清除保存有关您的导航历史数据的 Backstack,这可能是您 return 提到片段而不是开始的原因目的地。
我找到了解决这个问题的快速方法: 在 App Hot Start 期间,Activity.onCreate() 与 "savedInstanceState" 一起调用,其中还包含导航状态。就我而言,我不想保留任何东西。因此我简单地调用了 super.onCreate(null) 并且因此根本没有传递 "savedInstanceState" 变量。
我们还可以 alter/clear "savedInstanceState" 变量中一些我们不想恢复的状态。