Activity
是我们学习接触到的第一个组件,也是最重要的组件;也是面试过程中经常被问到的问题;熟练掌握Activity非常必要.
0x01、生命周期:
方法名 | 描述 |
---|---|
onCreate() | 活动生命周期执行的第一个方法,用户不可见,其中setContentView方法用于解析XML布局 |
onStart() | Activity已经启动,但还没有显示出来 |
onResume() | Activity已经启动但还未显示在前台了,当此函数执行完才会显示到前台 |
onPause() | 当一个弹窗或者其他因素导致活动可见但停止时调用 |
onStop() | 活动停止且不可见 |
onDestory() | 活动被销毁 |
onRestart() | 活动调用onStop停止后重新让活动start时会先调用onRestart方法后调用onStart方法 |
![](https://img.haomeiwen.com/i8179669/6ca691b79cc45eaf.png)
0x02、A活动启动B活动,A的onPause先于B的onResume()方法
MainActivity: onPause:
SecondActivity: onCreate:
SecondActivity: onStart:
SecondActivity: onResume:
Activity
的启动过程:由ActivityManagerService(AMS)
对栈内的Activity
状态进行同步管理 &
规定:新Activity
启动前,栈顶的Activity
必须先onPause()
,才能启动新的Activity
执行onResume()[1]
此处应该有ActivityManagerService的源码部分及分析,但是时间紧急,留个坑,后面完成。
0x03、以屏幕旋转为例的异常生命周期
当我们的安卓项目没有在AndroidManifest.xml中做如下配置时,我们每一次旋转屏幕,都会导致活动被重启;
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize">
他分别执行:
'''
onPause:
onSaveInstanceState:
onStop:
onDestroy:
onCreate:
onStart:
onRestoreInstanceState:
onResume:
'''
总结:一句话,先暂停再保存数据,而后先恢复数据,再resume
无论配置了什么,屏幕旋转总会去执行onConfigurationChanged
方法
0x04、四种启动模式
a、Standard
无论当前活动是否在栈顶,都会去重新启动一个活动,会执行onCreate
方法,onStart
和onResume
方法
b、SingleTop
当且仅当当前活动在任务栈的栈顶时,活动会被复用,否则就创建活动,原活动入栈
c、SingleTask
当任务栈里面有当前活动的实例,那么就把这个栈上面的活动释放出栈。然当前活动回到栈顶
d、SingleInstance
单独运行在一个返回栈里面,用于其他程序调用。
有个例子
A
,B
是standard启动模式,C
是singleInstance启动模式,A
启动C
, C
启动B
,B
点返回,怎么退出?
首先B
返回不会直接返回到C
,而是当前栈先出栈,所以返回到A
,A
返回,当前栈里 A
出栈,栈空,则返回到C
所在的栈,C
出栈,所有栈空,程序结束。
参考资料
[1] 作者:Carson_Ho 链接:https://www.jianshu.com/p/b1ff03a7bb1f
网友评论