1、Activity的活动状态
Running、Pause、Stop、Killed
2、Activity的生命周期
onCreate->OnStart->onResume
onPause->onStop(如果新的Activity设置了透明主题 那么原来的Activity不走onStop 因为他还是可见的)
(onPause少做 因为跳转到其他页面 他是必经之路 也就是先走完onPause 再走下一个页面的OnCreate->onStart->onResume->(old Act)onStop)
onRestart->onStart->onResume 其他的页面 返回来之后的生命周期
3、异常的情况下(比如屏幕发生旋转切换横竖屏幕)杀死了Activity 然后恢复时候的生命周期
这时候会知行onSaveInsanceSate,他发生在onStop之前,但是不保证在onPause之前或者之后,但是只有在异常状态下的时候会知行onSaveInsanceSate
正常结束的生命周期 是不会调用onSaveInsanceSate方法的
onRestoreInstanceState是重建恢复税后调用,从时序上来讲 他发生在onStart之后
每一个View都有onSaveInstanceState和onRestoreInstanceState方法,当Activity异常的时候 会调用Activity的onSaveInstance ,然后委托window去保存数据,然后Window委托顶层的View去保存数据 一般来说这个顶层的view 就是decorView,然后这个view会一一的通知他的子View ----通过调用子view的onSaveInstance
4、Activity的启动模式
standard标准模式
singleTop 栈顶复用
singleTask 站内复用 如果与其他Activity在同一个栈内 如果栈内有一个singleTask的Activity 比如ABCD(A在栈底部)这时候调用singleTask的B 那么CD将要被清除 因为single有clearTop的功能
singleInstance 单例模式 他自己存在一个栈内 与其他的栈不在一起 如果他会一直存在一个
2、singleInstance的Activity所在的Task不允许存在其他Activity,任何从该Activity加载的其它Actiivty(假设为Activity2)都会被放入其它的Task中,如果存在与Activity2相同affinity的Task,则在该Task内创建Activity2。如果不存在,则重新生成新的Task并入栈。
设置启动模式 可以有两种 一种是在Manifest中设置启动模式,另外一种是中Intent中的Flag设置,这两种方式如果同时设置 那么第二种方式优先级高
两种方式还有一些不同,比如第一种没有clearTop 第二种没法设置singleInstance模式
FLAG_ACTIVITY_NEW_TASK -》standar
FLAG_ACTIVITY_SINGLE_TOP-》singleTop
FLAG_ACTIVITY_CLEAR_TOP -》配合FLAG_ACTIVITY_NEW_TASK 同一个栈内 位于他上面的所有Activity都会被出栈,如果activity已经存在 那么调用onNewIntent,如果Activity是standard模式 那么连同他都要被出栈 然后创建新的
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有这个标识的Activity不会出现在Activity列表中 也可以在Manifest中设置android:excludeFromRecents="true"
5、如果想查看当前设备显示的Activity有哪些
可以使用命令
adb shell dumpsys activity