ManActivity + 启动时的片段差异

问题描述

我正在构建一个具有与我的 app 应用程序模块处于同一级别的功能模块的 Android 应用程序,为了获得灵感,我正在查看一些在线存储库。

复制其中一个时,我注意到我的应用程序启动的生命周期略有不同。 我们都有一个只有 MainActivity 的清单,并且我们都有一个BottomNavigationView一个 fragment 字段组成的 MainActivity 布局,其中包含一个 NavHostFragment 引用相同的导航图。 然后我们都在导航 xml 文件中引用了片段 (StartFragment),其布局包含一个简单的文本字段。

所有基本上看起来都一样,但在我的情况下,一旦 Activity 到达 StartFragmentonViewCreated 就会通过它的 setContentView 而在项目中我从中获得灵感Activity 用它的 onCreate

完成

我正在比较 StartFragment.onViewCreated 上转储的两个堆栈跟踪,它们看起来不同,但我不知道是什么原因造成的。

MY STACKTRACE

java.lang.Throwable: stack dump
 at java.lang.Thread.dumpStack(Thread.java:490)
 at com.mypetproject.StartFragment.onViewCreated(StartFragment.kt:19)
 at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2987)
 at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:546)
 at androidx.fragment.app.FragmentStateManager.movetoExpectedState(FragmentStateManager.java:282)
 at androidx.fragment.app.FragmentStore.movetoExpectedState(FragmentStore.java:112)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1647)
 at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3126)
 at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:3063)
 at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2988)
 at androidx.fragment.app.FragmentStateManager.ensureInflatedView(FragmentStateManager.java:392)
 at androidx.fragment.app.FragmentStateManager.movetoExpectedState(FragmentStateManager.java:281)
 at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:140)
 at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
 at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
 at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
 at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
 at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
 at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
 at com.mypetproject.MainActivity.onCreate(MainActivity.kt:18)
 at android.app.Activity.performCreate(Activity.java:5937)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
 at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2251)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
 at android.app.ActivityThread.access$800(ActivityThread.java:144)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5221)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

OTHER PROJECT STACKTRACE

java.lang.Throwable: stack dump
 at java.lang.Thread.dumpStack(Thread.java:490)
 at bg.dihanov.commonui.StartFragment.onViewCreated(StartFragment.kt:19)
 at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1187)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1356)
 at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1497)
 at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
 at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
 at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
 at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1188)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1356)
 at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
 at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1497)
 at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
 at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
 at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
 at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
 at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
 at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
 at android.app.Activity.performStart(Activity.java:5953)
 at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2261)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
 at android.app.ActivityThread.access$800(ActivityThread.java:144)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5221)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

附言这两个应用程序都是在运行 Android 21 的模拟器上启动的,并且两个项目的依赖项、插件、gradle 包装器等具有相同的版本。

解决方法

在花费数小时调查此问题后,我发现这是由于我的项目中存在的依赖项在我从中汲取灵感的项目中不存在。

implementation 'androidx.fragment:fragment-ktx:1.3.3'

所以要小心,因为显然这种额外的依赖会修改 Activity/Fragment 对的生命周期/行为