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 框架的库(并且可能没有遵循以下规则:我在下面描述)。
据我所知,所有对 Activity
或 Fragment
的框架方法的调用(除非另有特别说明)都是在主 (UI) 线程上进行的。这意味着它们不能被任何其他框架调用中断,它们运行完成并且它们不能并行运行。我个人的经验分析同意。
【讨论】:
感谢您的回答 如果答案对您有帮助,请单击答案旁边的绿色复选标记接受。这将有助于其他可能有类似问题的人,提高您的接受率并给我一些声誉积分。以上是关于Activity 生命周期回调可以相互中断还是同时发生?的主要内容,如果未能解决你的问题,请参考以下文章
跟着Google学Android —— 3.1 管好Activity的生命周期