activity 面试总结

activity生命周期

面试题总结

  • 问onStart(),与onResume()有什么区别?

onStart()是activity界面被显示出来的时候执行的,用户可见,包括有一个activity在他上面,但没有将它完全覆盖,用户可以看到部分activity但不能与它交互

onResume()是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。

onStart()通常就是onStop()(也就是用户按下了home键,activity变为后台后),之后用户再切换回这个activity就会调用onRestart()而后调用onStart()

onResume()是onPause()(通常是当前的acitivty被暂停了,比如被另一个透明或者Dialog样式的Activity覆盖了),之后dialog取消,activity回到可交互状态,调用onResume()。

  • 什么情况下Activity走了onCreat(),而不走onStart()

我们在onCreate()里面加了super.onStop();或super.onDestroy();,这样执行到onCreate()函数时,执行流程是这样的:onCreate -> onStop或onDestroy -> onStart -> onResume。最终还是会执行onStart。而如果加上finish(),则onCreate -> onDestroy,而不会执行onStart。

  • 分别在onCreate / onStart / onResume 里面调用finish,生命周期怎么调用

如果Activity在onResume(可见)之前就需要被销毁时,onPause(不可见)也也不会执行;
如果Activity在onStart(开始)之前就需要被销毁时,onStop(停止)也不会执行;

  • 假设项目中有这样的需求,当指定的 Activity 在用户可见后才进行广播的注册,在用户不可见后对广播进行注销,那应该在哪两个回调中做这个处理呢?

认真看了上面的解释的童鞋肯定都比较清楚。问题中强调了「可见」和「不可见」,所以我们只需要注重可见生命周期,在Activity 启动后,会先调用 onCreat() 方法进行布局和想关事件的绑定,直到回调 onStart() 方法后活动才可见,所以直接回答 onStart()onStop() 即可。

  • 如果有一些数据在 Activity 跳转时(或者离开时)要保存到数据库,那么你认为是在 onPause() 好还是在 onStop() 执行这个操作好呢?

熟悉 Activity 的生命周期的我们都知道,onPause() 相比 onStop() 更容易触发。而「数据」就是 APP 甚至互联网产品的根,我们虽然绝大多数情况下都会遵从 onPause() =onStop() 的原则,但我们实在难以保证每次运行都能正常运行到 onStop() 方法,比如还没运行到 onStop() 系统就被回收了。

值得注意的是,这个操作要尽量地快,不然肯定会影响到下一个 Activity 的生命周期的。

  • Activity A 启动了 Activity B,简单说下它们分别的生命周期的变化。
  • Activity A 通过 Intent 显示启动了 Activity B,当 B 处于可见状态后,A 是否一定会调用 onStop()?

这两个问题其实考察的点基本一致,大概就想考察面试者是否认为只要最上层栈顶的 Activity B 处于可见状态,那下面一层的 Activity A 就一定会调用 onStop() 方法。

如果直接照第四个问题的方式提问你,你就算认定一定会调用,但你也会被问的怀疑人生。但由于你觉得一定调用 onStop() 方法,并且你也找不到不调用的情况,所以你很耿直的回答了一定会调用。

实际上却并不是一定会调用,我们上面也说了,Activity 调用 onStop() 的时期是该 Activity 处于完全不可见状态,所以我们只需要想办法举出还可见的状态就好了。
我们假设弹出一个对话框形式的 Activity B,甚至就算弹出一个正常的 Activity B,把 B 的页面设置较低的透明度,实际上是一样的效果,不信你去打印日志试试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值