Activity 为什么要有 onStart 生命周期? 直接用 onResume 不行吗?

2021-01-07 21:18:39 +08:00
 narutow

两个 Activity 切换时, 它们的生命周期顺序是

... A#onPause B#onCreate B#onStart B#onResume A#onStop ...

这样安排顺序我能理解, 在 A 显示的时候让 B 显示, B 完全展示后, A 走 onStop, 这样用户界面不会黑屏.

但有个疑问, B Activity 展示的回调中为什么要多一个 onStart, 直接通知正在展示的 Activity onRESUME 不行吗

5377 次点击
所在节点    Android
8 条回复
also24
2021-01-07 21:24:52 +08:00
我觉得谷歌是希望能严格区分 onPause() 和 onStop() 的。

所以对应着搞了 onResume() 和 onStart() 作为对应的恢复状态。


实际上 Google 确实专门讲了 onPause() 和 onStop() 的差异:
https://developer.android.com/guide/components/activities/activity-lifecycle
janus77
2021-01-07 21:28:49 +08:00
onresume 是 ui 渲染了,有些特殊的需求是希望在渲染之前执行,或者在进入后台(不渲染)的时候扔会执行。所以就需要 onstart 和 onstop
RikkaW
2021-01-07 21:40:15 +08:00
分屏、画中画等等屏幕上不止一个 Activity (窗口)的情况下就是只有处于焦点的那个是 resumed 状态,其他的都是 started 状态。
zagfai
2021-01-07 22:36:16 +08:00
Android 给开发者制定的架构就是一坨翔
rosu
2021-01-07 23:43:19 +08:00
start 是可见,resume 是焦点。
narutow
2021-01-08 11:05:36 +08:00
@RikkaW 感谢, 理解了, onStart 和 onRESUME 就是界面可见 和 获得焦点可以同用户交互 的两个回调. 其他比如多窗口可以看到, 但不能交互的情况, Activity 就处于 onPause
kraits
2021-01-08 11:43:07 +08:00
楼主有没有考虑到 Activity 横竖屏切换的生命周期:

onSaveInstanceState()→onPause()→onStop()→onDestroy()→onCreate()→onStart()→onRestoreInstanceState()→onResume()
fromzero
2021-01-15 14:13:56 +08:00
onStart onRestart 都是满有用的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX