美文网首页面试相关程序员android成神之路
Android Activity生命周期详解(针对实习面试)

Android Activity生命周期详解(针对实习面试)

作者: DoubleCake | 来源:发表于2016-06-13 17:10 被阅读197次

    先发一张经典的不能再经典的activity生命周期图

    activity生命周期图

    首先声明一点,我认为对于刚接触Android不久的人,了解一下就可以,没必要弄懂深层次的东西,本篇文章主要面向实习生面试。一般实习生面试,面试官都会涉及到Android四大组件,而activity的生命周期又非常基础和重要,下面我先根据上面的图简单解析一下:

    在正常情况下,一个activity被启动会经历如图所示生命周期 

    (1)onCreate:  表示activity正在被创建

    (2)onRestart: 当activity从不可见状态变为可见状态时,会调用此方法

    (3)onStart: 此方法被调用时表示activity已经显示出来了,但是activity没有在前台,无法和用户交互

    (4)onResume: 表示activity已经可见,到了前台并可以和用户交互

    (5)onPause: 当Activity被一些窗口遮挡住的时候就会调用此方法,例如弹出dialog

    (6)onStop: 当activity不可见的时候会调用此方法,例如跳转activity,按home键

    (7)onDestroy: 当activity被销毁的时候会调用此方法,例如在activity中执行finish()方法

    在这里强调几个问题:

    (1) 当activity被销毁时,再哪个生命周期函数中做数据保存工作最可靠?

    答案是在onPause函数中。

    根据上面的声明周期图中我们可以看出,如果activity处于onPause时,如果系统内存不足,当前的activity进程就有可能被杀死,所以在onPause中做数据保存工作最可靠。

    (2)在屏幕状态发生改变时,例如竖屏变为横屏,这时activity会执行哪些生命周期方法?

    这就涉及到了在异常状况下activity的生命周期:看下面我的测试程序图

    当我点击了横竖屏切换的时候会调用这些方法

    onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume

    这里我们注意到多了一个onSaveInstanceState方法和onRestoreInstanceState方法,onSaveInstanceState方法是当activity是在异常情况下终止时,会被调用,用于保存数据。然后当activity被重新创建的时候会调用onRestoreInstanceState,用于恢复数据。这里要提到一点,就是在onCreate中也可以恢复数据,二者的区别是:onRestoreInstanceState一旦被调用,其参数Bundle saceInstanceState一定是有值的,但是onCreate不行,如果onCreate正常启动的话,其参数Bundle saceInstanceState是为null的,必须要进行判断是否为空。

    我再补充两个容易被忽略的生命周期调用情况

    1 关闭屏幕 onPause->onSaveInstanceState->onStop

       再打开屏幕 onRestart->onStart->onResume

    2 在主界面按home键 onPause->onSaveInstanceState->onStop

       再次回到主界面 onRestart->onStart->onResume

    一般作为实习生参加面试,面试官是不会涉及到activity的启动模式相关问题,不过也会有个别面试官喜欢深入一点,如果这时你回答上来了,那肯定就是加分项,下面我就简单介绍一下Android里面activity的启动模式:

    activity的启动模式有四种

    (1) standard    标准模式

        默认的启动模式,不管有没有已经存在的实例,都会生成新的实例。

    (2)  singleTop   栈顶复用模式

        假设一个activity的启动模式设置为singleTop,当一个activity要跳转到这个activity时,如果该activity存在任务栈中且处于栈顶,那么将不会生成一个新的该activity,而会重复利用这个activity,并且会回调该activity中的OnNewIntent方法。

    (3)  singleTask    栈内复用模式

        这是一种单例模式,只要activity在一个栈中存在,那么多次启动该activity都不会重新创建实例,并且默认具有clearTop的功能,就是假如一个人物张总有ABCD四个activity,A的启动模式为 singleTask,A处于栈底,D处于栈顶,如果这时启动A,那么BCD都将会被清除出栈,也就是在A之上的都会被清除,这就是clearTop。

    (4)  singleInstance    单实例模式

        它具有singleTask的所有特性,并且这种模式下,该activity只能单独处于一个任务栈中,所以启动它时系统会为这个activity新建一个任务栈。

    关于activity的启动模式,想深入了解的人可以在其他地方多了解了解,这里我只是做个简单介绍,应该足以应付实习生面试。

    最后在分享一下安卓实习面试经验,四大组件非常重要,四大组件非常重要,四大组件非常重要。

    相关文章

      网友评论

      本文标题:Android Activity生命周期详解(针对实习面试)

      本文链接:https://www.haomeiwen.com/subject/idwuhttx.html