【问题标题】: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”变量中我们不想恢复的一些状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多