为什么 Fragment 的 onCreate 仅在通过 Android Studio 安装后首次启动时才会被多次调用?

Why Fragment's onCreate is called multiple times only for the first launch after install via Android Studio?

提问人:mohammad.hasan.mahdavi81 提问时间:10/28/2023 更新时间:10/28/2023 访问量:32

问:

当我通过Android Studio在手机上安装我的应用程序时,我遇到了一个奇怪的问题。

我的 MainActivity 中有一个 SplashFragment,它是我的nav_graph的起始目标。在MainActivity中,我有一个包含nav_graph的NavHostFragment。

我的 SplashFragment 似乎启动了 2 次导致崩溃,因为 SplashFragment 在几秒钟后使用 NavController 的导航功能将用户重定向到另一个片段。

有趣的是,这只发生在安装后的第一次,并且只有在我通过 Android Studio 安装应用程序时才会发生。也就是说,当我制作apk文件并将其安装在手机上或已经在手机上安装了该应用程序时,它不会发生。

我尝试了这段代码来记录我的 SplashFragment 的 onCreate 被调用了多少次:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val backStackEntries = findNavController().currentBackStack.value
        logger(backStackEntries.last().id, "UNKNOWN")
        logger(backStackEntries.map { it.destination.displayName }, "UNKNOWN")
        logger(++splashViewModel.count, "UNKNOWN")
    }

然后我看到了这个日志:

enter image description here

堆栈上只有一个 SplashScreen 实例,但不知何故,onCreate 方法被多次调用。

我再次指出,这仅在安装后第一次发生,并且仅在我通过Android Studio安装应用程序时发生。

android kotlin android-activity 片段

评论

0赞 ΓDΛ 10/28/2023
您可以尝试<activity android:launchMode=“singleInstance”>
0赞 mohammad.hasan.mahdavi81 10/28/2023
@ΓDΛ 它没有改变

答: 暂无答案