Activity 生命周期回调可以相互中断还是同时发生?

Posted

技术标签:

【中文标题】Activity 生命周期回调可以相互中断还是同时发生?【英文标题】:Can Activity lifecycle callbacks interrupt each other or happen concurrently? 【发布时间】:2021-05-19 17:19:02 【问题描述】:

像 onCreate()、onStart()、onResume() 这样的 Activity 生命周期回调,总是在执行之前等待前者完成,或者是否有可能在 onCreate() 完成之前调用 onStart(),中断它,并且然后 onCreate 在 onStart() 完成后继续。它们是否有可能同时运行,比如 onStart() 是否可以在 onCreate() 尚未完成时被调用,然后执行一行 onStart(),然后执行一行 onCreate(),等等。

我认为情况并非如此,登录我的应用程序显示事实并非如此,但我从未见过明确提及它,因为我不知道它在其他版本或设备上的情况。我还读到每个应用程序默认都有一个线程,所以我认为这意味着它不能并发,但我想确定一下。

让我想到这一点的主要事情是,有些人在网上说,在 onCreateOptionsMenu() 活动中,onCreateOptionsMenu() 是在 onCreate() 启动之后但在它完成之前调用的。例如第一个答案here。但是另一位用户在其他地方说,在某些版本上,在 setContentView() 中调用了 onCreateOptionsMenu(),我猜这就是原因。那么它会变成这样吗?

onCreate() -> onCreateOptionsMenu() 调用,onCreate() 暂停 -> onCreateOptionsMenu() 完成 -> onCreate() 恢复

我做对了吗?不涉及并发?

像 onCreate()、onStart()、onResume() 这样的主要回调不会发生这样的事情吗?

【问题讨论】:

它们都按顺序在主应用线程上执行。 onCreateOptionsMenu 不是您链接的问题中提到的与生命周期相关的方法,它与显示/打开的菜单有关。 @Pawel,感谢您的回答,那么 onStart() 只会在 onCreate() 完成后调用吗? 是的,onStart() 只会在 onCreate() 完成后被调用。 @DavidWasser 感谢您的澄清,这里的第一个答案让我感到困惑***.com/questions/58899219/…。措辞让我质疑它。我想这是因为他在其中进行了异步调用。 【参考方案1】:

您引用了关于 onCreateOptionsMenu() 时间的非常古老的问题/答案,这些非常古老的帖子引用了 ActionBarSherlock 这是一个不属于 android 框架的库(并且可能没有遵循以下规则:我在下面描述)。

据我所知,所有对 ActivityFragment 的框架方法的调用(除非另有特别说明)都是在主 (UI) 线程上进行的。这意味着它们不能被任何其他框架调用中断,它们运行完成并且它们不能并行运行。我个人的经验分析同意。

【讨论】:

感谢您的回答 如果答案对您有帮助,请单击答案旁边的绿色复选标记接受。这将有助于其他可能有类似问题的人,提高您的接受率并给我一些声誉积分。

以上是关于Activity 生命周期回调可以相互中断还是同时发生?的主要内容,如果未能解决你的问题,请参考以下文章

Activity的生命周期

跟着Google学Android —— 3.1 管好Activity的生命周期

关于android应用activity生命周期中,按下home键和按下back键的问题

activity生命周期

Activity 学习笔记02-生命周期

Activity 学习笔记02-生命周期