Activity任务栈
Android中管理Activity的方式:Activity任务栈
Activity的四种状态:
Active:当前Activity处在栈顶+可见+可交互
Paused:当前Activity可见但不可交互,处于失焦状态。比如当Activity被另一个非全屏Activity覆盖时。
Stopped:当前Activity被完全覆盖
Killed:被回收
如图所示,对于不是处在栈顶的Activity,随时可能被回收
Activity生命周期
onSaveInstanceState:
当系统存在“未经许可”杀死Activity时调用,适合在这里保存瞬时数据,不适合保存持久化数据。
特别注意:当从ActivityB按Back键返回ActivityA时不会调用onSaveInstanceState方法,因为这是在“用户许可”的情况下杀死Activity
未经许可的几种情况:
1.当用户按下HOME键时
2.长按HOME键切换其他App时
3.关闭屏幕时
4.ActivityA启动ActivityB时
5.屏幕旋转/改变语言时
onRestoreInstanceState:
只有在Activity“确实”被系统销毁了才会走
也就是说,onSaveInstanceState和onRestoreInstanceState调用不是对称的
Activity启动模式
standard
singleTop:如果目标不在栈顶才会重复创建一个
singleTask:根据TaskAffinity去找有没有对应的任务栈,如果在对应任务栈中存在该Activity就把它上面的其他Activity都清除
singleInstance:一个Activity独享一个任务栈(独占性)
注意
设置了singleInstance和singleTask的Activity具有全局唯一性,即同一时刻在Android系统中只能存在该Activity的一个实例