Activity

Activity是我们学习接触到的第一个组件,也是最重要的组件;也是面试过程中经常被问到的问题;熟练掌握Activity非常必要.

0x01、生命周期:
方法名 描述
onCreate() 活动生命周期执行的第一个方法,用户不可见,其中setContentView方法用于解析XML布局
onStart() Activity已经启动,但还没有显示出来
onResume() Activity已经启动但还未显示在前台了,当此函数执行完才会显示到前台
onPause() 当一个弹窗或者其他因素导致活动可见但停止时调用
onStop() 活动停止且不可见
onDestory() 活动被销毁
onRestart() 活动调用onStop停止后重新让活动start时会先调用onRestart方法后调用onStart方法
Activity_第1张图片
活动的生命周期

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中做如下配置时,我们每一次旋转屏幕,都会导致活动被重启;

 

他分别执行:

'''
onPause:
onSaveInstanceState: 
onStop:
onDestroy:
onCreate: 
onStart:
onRestoreInstanceState: 
onResume:
'''

总结:一句话,先暂停再保存数据,而后先恢复数据,再resume

无论配置了什么,屏幕旋转总会去执行onConfigurationChanged方法

0x04、四种启动模式

a、Standard
无论当前活动是否在栈顶,都会去重新启动一个活动,会执行onCreate方法,onStartonResume方法
b、SingleTop
当且仅当当前活动在任务栈的栈顶时,活动会被复用,否则就创建活动,原活动入栈
c、SingleTask
当任务栈里面有当前活动的实例,那么就把这个栈上面的活动释放出栈。然当前活动回到栈顶
d、SingleInstance
单独运行在一个返回栈里面,用于其他程序调用。
有个例子
AB是standard启动模式,C是singleInstance启动模式,A启动C, C启动B,B点返回,怎么退出?
首先B返回不会直接返回到C,而是当前栈先出栈,所以返回到A,A返回,当前栈里 A出栈,栈空,则返回到C所在的栈,C出栈,所有栈空,程序结束。
参考资料
[1] 作者:Carson_Ho 链接:https://www.jianshu.com/p/b1ff03a7bb1f

你可能感兴趣的:(Activity)