干货︱Android面试必问之四大组件

时间:2021-12-26 14:48:09

大牛校招:提供最权威的互联网面试指导,让你关键时刻弯道超车~

对于Android一般的面试流程,除了极个别的喜欢不拘一格,大部分的面试过程都差不多,除掉了笔试环节,面试流程大多如下:

干货︱Android面试必问之四大组件

关于项目经验,对于应届毕业生来说,目前还不适合启动,所以会靠后一些进行讲解。如果有着急面试的建议找一些开源项目看一下,能写一遍最好,没时间就搞清楚其业务需求和实现方法。

今天的课程从Activity的生命周期开始,谈谈面试中如何回答下面这些问题:

一、对Activity生命周期的理解?

正确的回答方式是先说生命周期状态迁移图

干货︱Android面试必问之四大组件

对照这张图,需要将onCreate、onStart、onResume等问题描述清楚,为了表示自己理解深刻,可以说一下自己的理解,最主要的就是onCreate与onDestroy、onStart与onStop、onResume与onPause的成对关系,onPause之后容易被系统销毁,所以要做好数据保存工作

还有一个onRestart,很多人忽视他的作用,其实是回答的一个亮点。onRestart一般是应用到后台之后再起来在onStop之后,所以很多数据的刷新工作可以在这里执行。绝大部分人,不管是初中高级的开发工程师,都喜欢放到onResume中来做数据的刷新工作,这个也没有太大问题,但是在性能上来说不如onRestart。

还有一个重点是onDestroy

我们一般在onDestroy中做一些释放资源的工作,初学者会怀疑不安全,因为经常听说onDestroy可能不会被调用,其实是非常安全的,onDestroy什么时候不被执行呢,就是系统强制回收Activity,这里有个概念,由于资源不足时回收Activity,这句话误导了很多人。完整的描述是销毁Activity所在的进程,进程都被杀了,资源当然释放了。

需要注意的是,onDestroy是回调方法,本身不会做任何事,他是系统在销毁过程中为了通知开发者调用的,准确地说是系统销毁Activity的过程中,系统已经决定要销毁Activity了,才会调用onDestroy方法。

二、为什么要关注异常生命周期?

异常生命周期从理论上来说好像是异常情况,属于少数情况,其实不是的,异常生命周期几乎是必现的情况,因为除了加入白名单的那些应用,没有哪个敢保证我的应用能在后台存活3分钟。

不是说一定不能存活3分钟,是把一个应用放到众多手机型号,各种使用场景中,很难保证存活,比如华为的机型,一放到后台就被杀,比如用户喜欢玩游戏,内存比较紧张,都会导致你的应用在后台被杀

所以关注异常生命周期是必须的,异常生命周期最重要的概念是状态保存和恢复

三、四大组件的Context有什么区别?

这里说一下Activity跟Service都继承自Context,区别是Activity包含Theme信息,启动的Activity带有任务栈的信息,ContentProvider的Context就是Application,Broadcast Receiver的Context比较特殊,是传进来的,类型是ReceiverRestrictedContext,也就是说进行了一些限制,不能bindService,也不能registerReceiver。

四、四大组件是如何启动的?

面试中不会问需要太长时间回答的问题,一般耗时最长的问题就是Activity的启动过程。显然这个问题不是让你刨根问底,activity的启动就是startActivity或者startActivityForResult,Service就是startService和bindService,这两个好答,但是BroadcastReceiver跟ContentProvider呢,可能就不是很清楚了,主要是考察这两个,而且ContentProvider的启动非常早,在Application的onCreate之前。

这两个都是在进程启动的时候完成的初始化,broadcastreceiver没有生命周期方法,所以说他是短时的,就是在广播来的时候调用onReceiver,ContentProvider是在Application调用onCreate之前调用的他自己的onCreate,然后等待intent执行相应的动作

还有一个问题是各自运行在什么线程,Activity跟Receiver是在UI线程,Service可能在UI线程,也可能是在binder线程,Provider是在binder线程

Service如果是start起来的在UI线程执行,bind起来的在binder线程执行

总结:

面试过程主要是对技术和沟通能力的考察,学历和资历是其次

在面试过程中要先明白面试官的问题,谦虚尊重,不懂不装懂

另外,面试的时候要直面问题,先答基本概念,然后补充一些异常情况和实际项目需要注意的问题,如果对原理或着源码熟悉就进一步讲解,切记旁征博引不相干的问题

直接扫描下面二维码,或关注微信公众号“大牛校招”报名参加“Android训练课程”

干货︱Android面试必问之四大组件