Android 活动/片段在方向更改时重复 (Kotlin)



我意识到,当我在应用程序的mainActivity上更改方向时,所有日志都会开始重复,如果我再次这样做,它们会增加三倍,依此类推。我假设每次都从头开始创建活动,但由于我使用的是 navhost,我不知道如何制作它,因此它不会每次都重新创建。MainActivity 基本上是空的(目前(,并且包含带有 ViewModel 的片段。

主要活动:

override fun onCreate(savedInstanceState: Bundle?) {
if (BuildConfig.DEBUG) {
Timber.plant(DebugTree())
}
Timber.w("Started")
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
override fun onSupportNavigateUp() = findNavController(R.id.my_nav_host_fragment).navigateUp()

片段代码:

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val v = inflater.inflate(R.layout.articles_fragment, container, false)
Timber.w("oncreateview called")
viewModel = ViewModelProvider(this).get(ArticlesViewModel::class.java)
return v
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Timber.w("onViewCreated called")
initAdapter()
super.onViewCreated(view, savedInstanceState)
}

所以我所做的是在每个(不是全部(生命周期方法上设置一个日志,当应用程序启动时,它会打印每个方法一次,如果我翻转屏幕,它会打印两次,然后打印三次,依此类推。如果我导航到另一个片段并返回,它不会重复......它似乎主要是方向变化。这是一个 Logcat 示例,我只放了 Start from Activity 和 onViewCreated from fragment,所以它不会那么长:

W/MainActivity: Started
W/ArticlesFragment: onViewCreated called
W/MainActivity: Started
W/MainActivity: Started
W/ArticlesFragment: onViewCreated called
W/ArticlesFragment: onViewCreated called
W/MainActivity: Started
W/MainActivity: Started
W/MainActivity: Started
W/ArticlesFragment: onViewCreated called
W/ArticlesFragment: onViewCreated called
W/ArticlesFragment: onViewCreated called

因此,每次我更改方向时都会添加一个实例。我相信实际上有三个实例相互叠加运行,所有方法也重复三次。例如,我从firestore获取数据,当活动重复时,数据被读取两次,如果三倍,则读取三次,依此类推。

提前感谢您的任何帮助。干杯!

如果有人遇到类似的问题,我找到了我的问题。

真正被复制的是MainActivity上的Timber树。

基本上是这样的:Timber.plant(DebugTree())需要被 savedInstanceState 上的空检查包围:

if (savedInstanceState==null) {
if (BuildConfig.DEBUG) {
Timber.plant(DebugTree())
}
}

最新更新