Android面试题-Activity A跳转Activity B,再按返回键,生命周期执行的顺序?

最近在准备面试,又碰到这一题,这已经是第三次了

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

每当听到这个题目的时候,我就会得意地笑,对于Activity的生命周期已经记熟的我,心想,为什么不直接问Activity的生命周期呢?于是自信满满的说出了如下的答案:

在A跳转B会执行:A onPause -> A  onStop ->  B onCreate -> B onStart -> B onResume

在B按下返回键会执行:B onPause -> B onStop -> B onDestroy -> A onRestart -> A onStart -> A onResume

正当我以为他会问点别的的时候,他吸了一口气说到,你下去多看看生命周期吧...

什么?我回答错了?回到家中我赶忙打开AS验证了一下,我是万万没有想到...结果如下:

首先打开A

在A跳转到B

然后在B按下返回键

没想到吧_没想到表情

What ????从log日志可以看出

当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 式或者 半透明背景呢?给你三秒钟考虑一下~

3...

2...

1...

如果上面那张图你看懂了,那答案就很简单了。

当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 方法!!感兴趣可以看我这篇文章:Android面试题-来说一遍View的绘制流程

 

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

我以为大家都是来装逼的,没想到,你们都是真的牛逼,只有我是装的 - 我以为大家都是来装逼的,没想到,你们都是真的牛逼,只有我是装的(金馆长)_表情头牌_金馆长_无节操_搞笑对话表情

 

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值