Android面试一天一题(3 Day)

面试题: 怎么理解Activity的生命周期?

这是一道几乎必问的Android面试题,当听到这题时大家的神经都会麻木,你问我背。说实话,如果你问我怎么理解,我也很难回答,因为这个问题太宽泛了,答什么都可以又答什么都难答好。有一次电话面试问了一个人,对方直接说不要问这种在网上到处都能看到的题,他只要上网一查就会。好吧,我脾气好,就接着问:
“那问什么题呢?”
“逻辑的,算法的,业务什么的,就是纯JAVA代码的。”
“那么熟悉什么算法呢?”
“。。。”(没答上)

但Activity的生命周期又至关重要,不问好像又对不起彼此。根据得到的反馈我后来稍稍改变了一下提问方式,不问怎么理解,而是给几个场景问怎么使用回调或回调的顺序(或要注意什么),从侧面看是否真正理解了。

下面还是先过一下官网上的Activity生命周期图,注意几个框线其实代表又可以细分为不同的周期。

如果一个Activity在用户可见时才处理某个广播,不可见时注销掉,那么应该在哪两个生命周期的回调方法去注册和注销BroadcastReceiver呢?

Activity 的可见生命周期发生在 onStart调用与 onStop调用之间。在这段时间,用户可以在屏幕上看到 Activity 并与其交互。我们可以在 onStart中注册一个 BroadcastReceiver以监控影响 UI 的变化,并在用户无法再看到您显示的内容时在 onStop中将其取消注册。

如果对方回答是在onResume和onPause方法中,那么你可以去引导对方看看在这两个方法有什么不好的地方。

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

这题的要点和上一题是一样的,onPause较容易被触发,所以我们在做BroadcastReceiver注销时放在onStop要好些。onPause时Activity界面仍然是可见的,如弹出一个Dialog时。但在保存数据时,放在onPause去做可以保证数据存储的有效性,如果放在onStop去做,在某些情况下Activity走完onPause后有可能还没顺利走到onStop就被系统回收了。

但要注意在onPause中要非常迅速地执行完所需操作,不然会影响到下一个Activity的生命周期函数的调用。

简单说一下Activity A启动Activity B时,两个Activity生命周期的变化。

当一个 Activity 启动另一个 Activity 时,它们都会发生生命周期转变。第一个 Activity 暂停然后停止(但如果它在后台仍然可见,则不会停止,比如B是半透明的),系统会创建另一个 Activity。 如果这两个Activity 共用保存数据到文件或者数据库,必须要注意,在创建第二个 Activity 前,第一个 Activity 不会完全停止。更确切地说,启动第二个 Activity 的过程与停止第一个 Activity 的过程存在重叠。

以下是当 Activity A 启动 Activity B 时一系列操作的发生顺序:

Activity A 的 onPause方法执行。
Activity B 的 onCreate、onStart和 onResume方法依次执行。
然后,如果 Activity A 在屏幕上不再可见,则其 onStop方法执行。

您可以利用这种可预测的生命周期回调顺序管理从一个 Activity 到另一个 Activity 的信息转变。 例如,如果您必须在第一个 Activity 停止时向数据库写入数据,以便下一个 Activity 能够读取该数据,则应在 onPause而不是 onStop执行期间向数据库写入数据。

小结

这几个问题看似简单,其实还是很能问出面试者是否真正理解Activity生命周期的转变。经常有人会问,知道这些有什么用?又不能提升编程能力?编程能力是一个很复杂的体系,不能光看有技术含量或者高大上的算法才叫有能力,和悟道一样,我认为认识理清Android体系,顺应它的道(机制)开发应用也是一种能力。

Even 原创
简书链接:http://www.jianshu.com/users/f9fbc7a39b36/latest_articles
转载请注明出处。
对Android面试有兴趣的可以关注我的微信公众号:Android面试启示录
Android面试启示录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值