常用回调方法:
onCreate:activity创建过程,正在初始化,setContentView加载布局资源
onStart:activity正在启动,activity已经加载完布局可以显示,但Activity还处在后台,未在前台无法和用户交互
onResume:activity在运行状态,可见,在前台,可以交互
onPause:activity正在停止,可以做些保存数据,停止动画的操作,但不能耗时过久,因为会影响新的activity的显示
(旧activity的onPause执行后新activity才能onResume)
onStop:activity即将停止,onSaveInstanceState在这之前执行,同样不能太耗时的操作
onDestroy:activity销毁,可以在这里进行回收和资源释放
onRestart:activity从不可见重新变为可见,stop()重新回到onstart状态的时候调用(典型例子就是按home,然后重新点开APP)
onSaveInstanceState:activity异常终止前在onStop前调用该方法保存数据
一个进程如果没有四大组件在执行,容易被系统杀死,所以后台程序最好放到Service中执行
四种状态:
运行:activity处于栈顶,并且可见状态
暂停:activity不在栈顶,但是可见或部分可见
停止:activity不在栈顶并且不可以,处于停止状态可能会被系统回收
销毁:activity从栈中移除,系统最倾向于回收该类activity
activity的四种启动模式:
standard标准模式:谁启动了activity,就在那个栈中创建activity实例入栈顶(用Application启动标准模式的activity会报错,因为Application没有栈),如果栈里已有该activity实例,也会创建实例并入栈顶
singleTop栈顶复用:判断栈顶是否已经是该activity实例,如果是,则不会重新创建,调用onNewIntent方法,如果不是,则创建入栈顶
singleTask栈内复用:先判断指定的任务栈是否存在,不存在则创建一个新的任务栈,并创建实例入栈,如果指定的任务栈存在,则判断栈中是否有该activity实例,如果有,则不会重新创建,调用onNewIntent方法,并且该实例上面的其他activity实例出栈,如果没有,则创建实例入栈顶
singleInstance单实例模式:activity独自位于一个任务栈,之后多次调用该activity均不会创建实例(因为activity单独位于一个任务栈并处于栈顶),除非该任务栈被系统销毁
启动模式可以在
上面多次提到指定任务栈,用TaskAffinity参数指定,默认任务栈名为应用的包名,一般配合singleTask使用
任务栈分前台任务栈和后台任务栈:后台任务栈处于暂停状态,可见但不能交互