程序员的知识教程库

网站首页 > 教程分享 正文

面试题:ActivityA跳转ActivityB再按返回键生命周期顺序?

henian88 2025-05-05 15:53:03 教程分享 1 ℃ 0 评论

问题:Activity A跳转Activity B,再按返回键,A、B的生命周期执行顺序是什么?

当A跳转到B的时候,A先执行onPause,然后居然是B再执行onCreate -> onStart -> onResume,最后才执行A的onStop!!!

当B按下返回键,B先执行onPause,然后居然是A再执行onRestart -> onStart -> onResume,最后才是B执行onStop -> onDestroy!!!

下面这张图已经给我们解释的明明白白了。

A跳转B

当调用startActivity时,向当前栈中添加activityB, activityA 会执行 onPause,此时 activityA 处于失去焦点但可见的状态,因为 activityB 还没开始绘制,所以activityA不会回调 onStop方法,接着 activityB 会开始执行 onCreate -> onStart -> onResume ,我们都知道Activity 是在 onResume 中开始绘制界面,当 activityB执行完 onResume后,此时 activityA 处于不可见的状态,即按图上所示,activityA 会回调 onStop 方法。这也就是在activityA 跳转 activityB 时,A的onStop 最后执行。

B 返回 A

同理,在activityB中按下返回键,activityB会先执行 onPause ,此时B还处于可见状态,A 会执行 onRestart -> onStart -> onResume ->,此时A 已经处于可见状态了,B 不可见,开始执行 onStop -> onDestroy 方法。这样解释就正确了!

情况二:如果 ActivityB 为 dialog 式或者 半透明背景呢?给你三秒钟考虑一下~

当A跳转到B的时候,A先执行onPause,然后居然是B再执行onCreate -> onStart -> onResume。(注意:A的 onStop 不会执行)

当B按下返回键,B先执行onPause,然后是A只会执行 onResume,最后 B 执行onStop -> onDestroy。

只要记住,只要 activity 处于可见的状态,就不会执行 onStop 方法!!(The activity is no longer visible !!!)即当前 activity 再也不可见了,才会回调 onStop 方法!

这道题我面试目前碰到了4次,直到第三次我才意识到问题的严重性,我说怎么有些面试让我回去等通知,等着等着就没信了。希望你们不要和我一样栽在这道题上...

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表