【问题标题】:App not starting from Start Destination of Android NavGraph on App Hot Start应用程序热启动时,应用程序未从 Android NavGraph 的启动目的地启动
【发布时间】:2019-09-17 11:27:17
【问题描述】:
我正在使用具有单个活动、多个目的地的 Android 导航架构组件。我正在初始化 SplashFragment 中的一些静态变量,这是我的 NavGraph 的“startDestination”。
但是我遇到了问题,当应用程序长时间处于后台时(Android OS 可能会收回一些内存),因此这些静态变量(或单例类)中的一些被重置。当应用程序进入前台时,我希望我的 Activity 再次以 SplashFragment (起始目的地)开始,因为它是重新创建的(调用了 onCreate() 方法)。但是由于一些导航保存状态机制,它是从最后一个目的地开始的。
我想知道如何在应用程序热启动期间清除导航状态,以便它从 Start Destination 开始。
【问题讨论】:
标签:
android
android-architecture-components
android-architecture-navigation
【解决方案1】:
我的第一个想法是覆盖片段的onStop( ) 方法并从内部调用navigateUp(),前提是您为要离开的目的地指定了弹出操作。
其他事情是清除 Backstack 保存有关您的导航历史的数据,这可能是您返回提到的片段而不是起始目的地的原因。
【解决方案2】:
我找到了一个快速解决这个问题的方法:
在 App 热启动期间,Activity.onCreate() 使用“savedInstanceState”调用,其中还包含导航状态。就我而言,我不想保留任何东西。因此,我只是调用了 super.onCreate(null),因此根本没有传递“savedInstanceState”变量。
我们还可以更改/清除“savedInstanceState”变量中我们不想恢复的一些状态。