OnCreate()与OnStart()的区别

17

http://developer.android.com/reference/android/app/Activity.html - sissonb
https://dev59.com/IWoy5IYBdhLWcg3wfeIR - asteri
我的理解是OnCreate只在打开应用程序的第一次调用。不要混淆'app'、'application'和Activity这些术语。即使Activity被销毁,应用程序仍然可以运行,并且在销毁后,Activity将再次被“创建”,因此无论其他应用程序组件是否仍在运行,都将再次调用onCreate(...) - Squonk
5个回答

24
只要您的设备没有杀死该进程(例如由于低系统资源),那么每次您离开应用并返回时,都会调用onStart。但是,如果应用程序进程被杀死,则在您返回时将再次调用onCreate,因为所有资源都已被释放。

3
严格来说不准确。当你说“失去焦点”时,可能是由于弹出窗口(对话框)出现导致的。Activity 仍然可见,只是被暂停而不是停止。当弹出窗口关闭后,基本的 Activity 将会恢复。 - Squonk

17

这份文档非常——我不是在开玩笑——有一张非常漂亮的图片来描述Activity生命周期(它是如何启动、工作和结束的)。

该图片直接连接在这里,基本上说明了以下内容:

  • onCreate()在创建Activity时被调用;也就是说,当应用程序被启动或开始时。此外,当方向改变时也会触发它。如果进程被杀死,然后返回,则再次调用它。
  • onStart()在启动后紧随onCreate()被调用。此外,在应用程序停止后导航回来时也会调用它(在onStop()之后,并跟随onRestart())。这会在Activity不再可见的情况下发生(即,“用户可以看到屏幕上的活动,尽管可能不在前台并与用户交互”)。

这张图比我用少于1000个单词能更好地解释它。


太棒了!非常感谢你,Eric!不过我还有一个问题:我需要在OnStart中使用setContentView(R.layout.activity)吗?或者因为我已经在OnCreate中使用了它,所以这是多余的? - Josh Beckwith
@JoshBeckwith 你只需要在创建布局时使用它。这个过程可以安全地在onCreate()中处理。 - Cat

4

从相反的功能开始解释可能最好不过了:onDestroy 和 onStop。

当一个活动被销毁或关闭时,会调用 onDestroy。下次打开它时,将调用 onCreate。

每当应用程序失去焦点并且不再可见时,都会调用 onStop。这通常是由于在旧活动上创建了新活动所致。当活动再次变为可见状态时,将调用 onStart。

此页面上的图表非常好地解释了活动可能处于的各种状态以及相关的转换方法:http://developer.android.com/training/basics/activity-lifecycle/starting.html


1
几乎是这样。onCreate通常在应用程序启动时调用,但也可能由于其他原因而被销毁/释放时调用。基本上,如果您想为Activity进行一次性设置,则应覆盖onCreate。如果您想每次用户导航到Activity时执行某些操作,则应覆盖onStart。如果您想在Activity变为可见/活动状态时执行某些操作,请使用onResume。如果您想为整个应用程序进行一次性设置,即仅运行一次,则应使用onCreate,但请检查是否已完成该设置,并仅在未完成时才执行它。
请查看此页面上非常有用的图表:Activity reference

0

这个网站提供了 Android 生命周期的可靠图形表示: http://developer.android.com/training/basics/activity-lifecycle/starting.html

onStart()会在应用程序可见时被调用,包括应用程序第一次创建和从后台返回屏幕上时。当用户切换应用并且应用处于后台时,也会出现第二种行为。当应用程序变得不可见时,onStop()会被调用,但当应用程序被完全“销毁”时,onDestroy()会被调用。在调用 onDestroy() 后,应用程序必须重新开始生命周期。

需要注意的是,当应用程序由于类似对话框等原因而失去焦点时,不会调用 onStart()。在这种情况下,会调用onPause(),然后在恢复焦点时调用 onResume()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接