什么时候在没有“ onStart()”的情况下运行“ onResume()”?

时间:2018-11-06 13:58:53

标签: android performance android-fragments

在测试期间,我没有发现onStart()在没有onResume()的情况下运行的情况。

如果有人能像我发现的this is the closest question一样阐明这个话题,但是没有一个答案是针对开始/继续部分的,只是针对停止/暂停部分的。

如果没有相关情况,是否可以忽略onStart()onResume()而不使用两者,因为这似乎是多余的吗?

2 个答案:

答案 0 :(得分:1)

两个例子浮出水面:

1。)“系统”对话框在您的应用上打开(例如,通过Intent.createChooser),但取消了该对话框

2。)在多窗口模式下,点击另一个应用程序,然后点击您的应用程序(您将收到onPause / onResume而不是onStop / onStart)


根据我的经验,真正需要onPause()的唯一时间是您自己编写相机。

如果要在onPause之后显示DialogFragment,通常需要等到onResumeFragments / onPostResume。

答案 1 :(得分:1)

There's documentation on it

  

活动的可见生命周期发生在调用onStart()到相应的调用onStop()之间。在此期间,用户可以在屏幕上看到该活动,尽管该活动可能不在前台并与用户进行交互。在这两种方法之间,您可以维护向用户显示活动所需的资源。例如,您可以在onStart()中注册一个BroadcastReceiver来监视影响您的UI的更改,并在用户不再看到您所显示的内容时在onStop()中取消注册。随着活动对用户可见和隐藏,可以多次调用onStart()和onStop()方法。

     

活动的前景生存期发生在调用onResume()到相应的调用onPause()之间。在这段时间内,活动位于所有其他活动的前面,并且与用户进行交互。活动可以经常在恢复状态和暂停状态之间进行切换-例如,当设备进入睡眠状态,何时发送活动结果,何时发送新意图时-因此这些方法中的代码应相当轻巧。 >

据我了解,onStart()onStop()代表可见性,而onResume()onPause()代表优先级。

例如,如果您打开应用程序,则将同时调用onStart()onResume()。在您的应用仍然打开的情况下,说您然后收到一条Facebook消息并打开聊天。 onPause()将被调用,但onStop()将不会被调用。您的应用不再位于前台,但仍然可见。

编辑:

我知道我链接了活动文档,但是根据Fragment documentation

  

onStart()使该片段对用户可见(基于正在启动的包含活动)。

     

onResume()使片段开始与用户交互(基于要恢复的包含活动)。

     

onPause()片段不再与用户交互,因为它的活动被暂停或片段操作正在活动中对其进行修改。

     

onStop()片段不再可见,因为它的活动已停止或片段操作正在活动中对其进行修改。

同样的原则适用。在大多数情况下,这只是来自活动的直接调用。