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

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

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

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

首先打开A

在A跳转到B

然后在B按下返回键

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

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

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

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

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

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

要理解为什么会这样需要先了解下Android中进程的优先级(优先级由上至下递减):

  • 前台进程:即与用户正在交互的Activity或者Activity用到的Service等,如果系统内存不足时前台进程是最后被杀死的
  • 可见进程:可以是处于暂停状态(onPause)的Activity或者绑定在其上的Service,即被用户可见,但由于失去了焦点而不能与用户交互
  • 服务进程:其中运行着使用startService方法启动的Service,虽然不被用户可见,但是却是用户关心的,例如用户正在非音乐界面听的音乐或者正在非下载页面自己下载的文件等;当系统要空间运行前两者进程时才会被终止
  • 后台进程:其中运行着执行onStop方法而停止的程序,但是却不是用户当前关心的,例如后台挂着的QQ,这样的进程系统一旦没了有内存就首先被杀死
  • 空进程:不包含任何应用程序的程序组件的进程,这样的进程系统是一般不会让他存在的

原因:

再说回为什么A 的 onStop最后回调,onStart 和 onStop 是从Activity是否可见的角度来回调的,onResume 和 onPause 是从Activity是否位于前台来回调。理解这句话,首先要理解“前台”于“可见”的区别。准确的说,应该是“前台进程”与“可见进程”的区别。前台进行是与用户正在进行交互的进程,可见进程是界面被用户看见,还不能进行交互的状态。这就是为什么Activity的生命周期onStart在onResume之前。在onStart时,还不能进行交互。onResume时才可以进行交互。A onStop 这个过程就是A Activity由前台转为后台的过程,所以A的onStop在B的onResume之后执行。

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

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

 

你可能感兴趣的:(Android面试)