[英]Android Activity/Fragment duplicates on orientation change (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 示例,我只从 Activity 中放置 onStart 并从片段中放置 onViewCreated ,所以它不会那么长:
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
所以每次我改变方向时,都会添加一个实例。 而且我相信实际上有三个实例在彼此之上运行,并且所有方法也重复了 3 次。 例如,我从 firestore 获取数据,当活动重复时,数据被读取两次,如果是三倍,则读取三倍,等等。
提前感谢任何非常感谢的帮助。 干杯!
如果有人有类似的问题,我发现我的问题是什么。
真正被复制的是 MainActivity 上的 Timber 树。
基本上是这样的: Timber.plant(DebugTree())
需要被 null 包围,检查 savedInstanceState:
if (savedInstanceState==null) {
if (BuildConfig.DEBUG) {
Timber.plant(DebugTree())
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.