一、启动模式
1.1 standard
默认模式。
1.2 singleTop
任务栈中没有该activity:创建activity;
任务栈中有该activity但不在栈顶:创建activity;
任务栈中有该activity并且在栈顶:不重新创建activity,只响应该activity的onNewIntent方法。
1.3 singleTask
任务栈中没有该activity:创建activity并压到栈顶;
任务栈中有该activity:销毁该activity上面所有activity,使该activity位于栈顶,并响应onNewIntent方法。
1.4 singleInstance
最为特殊的一个模式:设置了该模式启动的Acitivyt会在一个独立的任务栈中开启,同事该任务栈有且只有一个这样的Activity实例,每次再启动这个Activity的时候就会在该任务栈里重用该Activity同时响应onNewIntent方法。
1.5 singleInstace与singleTask的区别
singleTask启动的Activity在系统层面上来说是可以有多个实例的。比如说应用程序A想调用singleTask模式下的ActivityA,而应用程序B也同样调用了,那么在应用程序A和B中就会各有一个ActivityA的实例。
但如果该ActivityA是singleInstance模式的话,那么无论有多少个应用程序调用它,它都只可能在系统中存在一个实例同时该实例还是位于它自己的一个单独的任务栈中。
1.6 通过Intent中setFlags来指定启动模式
- Intent.FLAG_ACTIVITY_NEW_TASK
使用一个新的任务栈来启动一个Activity,该flag通常用于在Service中启动Activity的场景,因为Service中并不存在有Activity任务栈所以通常通过这种方式来新启动一个Activity任务栈并创建新的Activity实例。 - Intent.FLAG_ACTIVITY_SINGLE_TOP
与在manifest文件里的launchmode指定”singleTop”作用一样 - Intent.FLAG_ACTIVITY_CLEAR_TOP
与在manifest文件里的launchmode指定”singleTask”作用一样 - Intent.FLAG_ACTIVITY_NO_HISTORY
设置了该Flags的Activity在启动其他Activity后该Activity就消失了,不会保留在Activity栈中,此Activity可以作为一个中转Activity来负责启动其他的Activity。
二、生命周期
2.1 onCreate
Activity第一次创建的时候调用。主要做初始化操作:创建view、绑定数据到view。
2.2 onStart
此时Activity已经显示,但是还无法和用户交互
2.3 onResume
Activity此时已经可以与用户开始进行交互,Activity已经位于Activity栈的栈顶。
2.4 onPause
该方法由于调用过程过快而不宜做耗时操作,建议做一些数据的存储和动画的停止操作。此时activity依然可见
2.5 onStop
activity已经不可见。同样这里可做一些数据的存储操作
2.6 onRestart
activity重新回到前台
2.7 onDestroy
Activity方法将会被销毁,此时我们可以做一些回收和销毁的操作。
2.8 onSavedInstanceState+onRestoreInstanceState
这两个方法配套使用,用来做activity异常销毁时的数据存储和恢复。
常见使用场景:横竖屏切换,内存不足activity被回收后再次创建