如果在 Activity 更改时调用 onCreate 和 onStart 两者之间的区别在哪里?目的是啥?

Posted

技术标签:

【中文标题】如果在 Activity 更改时调用 onCreate 和 onStart 两者之间的区别在哪里?目的是啥?【英文标题】:Where is the difference between onCreate and onStart if both are called upon Activity change anyway? What's the purpose?如果在 Activity 更改时调用 onCreate 和 onStart 两者之间的区别在哪里?目的是什么? 【发布时间】:2021-10-01 20:29:52 【问题描述】:

我已经搜索了几十个 *** 帖子和 android 文档,但找不到答案。

根据this SF-post 接受的答案,onCreate 方法在首次创建活动时运行。它还指出,这里应该创建视图并绑定列表数据。

然后 onStart 方法运行,但问题就在这里。区别在哪里?如果您在 onCreate 中执行所有操作,切换活动,您的应用仍将显示相同的数据,无论您将应用置于后台还是切换活动。

那么如果你在 onCreate 中声明视图,你在 onStart 中做什么呢?将视图初始化到他们的 R.id.view ?获取数据?

我认为 onResume 然后用于听众,因为根据this SF-posts accepted answer,它是油门和刹车。

【问题讨论】:

我推荐阅读这个developer.android.com/guide/components/activities/… 如果用户切换回来,组件可能会停止和启动多次。 androidx.lifecycle 成为事物之前,覆盖onStartonStop 曾经更加相关,现在大多数需要了解活动状态的组件只会观察自己的生命周期而不会需要明确的通知。 @SaNtoRiaN 我之前已经阅读过该文档,但是如果无论如何调用 onCreate,它并没有真正消除关于 onStart 目的的混淆。 @Pawel 这样开发人员就不再需要担心了吗?把所有东西都塞进onCreate?这听起来不对。 【参考方案1】:

onCreate() 在首次创建活动时调用。 onStart() 在 Activity 变得可见时被调用,包括首次创建它的时间(在onCreate() 之后)以及在它从停止状态返回屏幕之后(例如,另一个 Activity 接管了屏幕)。

所以:

将创建活动时需要发生的代码放入onCreate()(并使用onDestroy()清理它)

将代码放入onStart() 中,或者在活动创建时在活动返回前台时(并使用onStop() 清理它)上)

通常情况下,当 Activity 返回到前台时,我们不会做任何特别的事情,这种情况下您无需担心onStart()onStop()

【讨论】:

下图也很有用:developer.android.com/guide/components/images/… @StellarEquilibrium:那么你正在做一些事情来导致这种情况发生。 @StellarEquilibrium:抱歉,我的意思是您正在做的事情导致 onCreate() 在您认为不应该被调用时被调用(例如,您在设置的开发人员部分)。您可以考虑提出一个单独的 Stack Overflow 问题,在其中提供 minimal reproducible example 显示您正在尝试的内容并显示您的日志和结果。 @StellarEquilibrium:我不知道有谁会以这种方式解决问题,尤其是在过去几年中。最后,如果它适合你,欢迎你做任何你喜欢的事情。感觉就像您正在尝试通过阅读一些 10 年前的帖子并将其与稍新的内容(例如,RecyclerView)混合来学习 Android 应用程序开发。您可能值得花一些时间阅读新书或新课程,它可以向您展示如何以更有条理和最新的方式完成工作。 @StellarEquilibrium:换句话说,在一个活动中实现onStart()onResume() 在现代Android 应用程序开发中有点“代码味道”。正如其他人所暗示的那样,对于您要解决的任何问题,很可能都有更好的解决方案。但是,教您现代 Android 应用程序开发远不止一个 Stack Overflow 问题和答案,这就是为什么我建议您寻找可以帮助您“加速”现代开发技术的书籍和课程。

以上是关于如果在 Activity 更改时调用 onCreate 和 onStart 两者之间的区别在哪里?目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Activity生命周期

Activity生命周期

桌面窗口集合更改时调用异步委托?

Activity横竖屏切换生命周期变化

视频结束时调用下一个活动

Android生命周期与Intent笔记