Activity 的四种形态
Activity任务栈:先进后出, 队列: 先进先出 1. Activity/Running : 栈顶,可见,可与用户交互
2. Paused : 失去焦点(如界面弹窗),被透明的Activity放在栈顶时,此时的Activity失去了与用户交互的能力,状态信息与成员变量还在,只有在内存紧张的情况被回收
3. Stoped :一个Activity被另外一个Activity完全覆盖,被覆盖的Activity进入Stoped状态,不再可见,但和Paused状态一样保持着状态信息和成员变量
4. Killed :Activity被系统回收掉
生命周期的不同走向
1. 正常情况
2. 跳转
3. 横竖屏切换
如何防止横竖屏切换Activity重建,在清单Activity中配置:
<activity android:configChanges="orientation|screenSize" />
4. 锁屏/开屏
对比不同
onStart() | onResume() |
---|---|
可见 | 可见 |
未出现在前台,可理解为Activity已经显示出来了,但是在后台(例如:界面覆盖了一层半透明) | 在前台 |
不能交互 | 可交互 |
onPause() | onStop() |
---|---|
位于前台 | 位于后台 |
一个界面到另一个界面,先onPause,再onStop | 跳转后,底层的activity在onStop方法,位于后台 |
异常情况下的生命周期
系统出现异常情况下自动调用onSaveInstanceState()和onRestoreInstanceState()方法
@Override
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//可恢复在onSaveInstanceState()方法中保存的数据
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
Log.d(TAG,"onSaveInstanceState is invoke");
//通过Bundle来保存数据
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(TAG,"onRestoreInstanceState is invoke");
//可恢复在onSaveInstanceState()方法中保存的数据
}
onCreate()方法和onRestoreInstanceState()方法都可以恢复数据,他们的区别是:
----onCreate()方法中的Bundle需要判断是否为null
----在调用onRestoreInstanceState()方法时,参数Bundle不能为空,所以可不必在此方法中判空,推荐使用onRestoreInstanceState()方法来恢复数据
网友评论