##Activity生命周期
正常情况下,一共七个生命周期:
- onCreate() 正在被创建,第一个方法,可以进行一些初始化操作
- onRestart() 表示activity正在被重新启动,一般情况下是acitivty是从不可见到可见状态被调用,
- onStart() 正在被启动, 界面已经可见还没有出现在前台,无法和用户进行交互.
- onResume() 已经可见并且在前台, 和onStart()对比都已可见但是onStart()在后台,onResume在前台.
- onPause() activity正在停止,正常情况下onPause()紧接着会被调用.onPause执行结束才会执行onResume()
- onStop() 即将停止,可以有一些稍微重量级的回收工作.不能太耗时.
- onDestory() 即将被销毁,生命周期最后一个,可以进行回收工作最终资源释放.
针对特定场景的讲解:
-
正常启动:onCreate–>onStart–>onResume
-
aty 打开新的界面或者返回到桌面的时候,onPause–>onStop。如aty采用的是透明主题不会走onStop。
-
当用户点击A中按钮来到B时,假设B全部遮挡住了A,将依次执行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。
此时如果点击Back键,将依次执行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。* aty生命周期异常 * 1. 资源系统配置变化 (onSaveInstance / onRestoreInstance) * onCreate / onRestoreInstanceState 都可以进行恢复,官方推荐后者,且后者不用判空 * 2. 内存不足低优先级aty被杀死 * 一个进程没有四大组件,很快会被杀死.可以把后台工作放入service中 * android:configChanges="screenSize|orientation|keyboardHidden" 4.0以上要添加screenSize * * 启动模式: * standard 标准 每次启动都会创建,运行在启动它的aty所在的任务栈. * 用applicationContext 启动该模式下的aty会报错,找不到相应的aty的任务栈, * 解决: 带启动aty设置标记,flag_activity_new_task(实际是singleTask) * singleTop 栈顶复用 直接调用onNewIntent * singleTask 站内复用 直接调用onNewIntent 具有clearTop效果,复用的aty前面的全部清除 FLAG_ACTIVITY_NEW_TASK * singleInstance 加强版singleTask 单独在一个任务栈内 * 启动模式区别: * 清单文件声明 无法直接进行clear_top操作 * intent.addFlag 优先级高/无法指定singleInstance模式. * * aty的Flag: * 有的可以指定aty的启动模式,比如FLAG_ACTIVITY_NEW_TASK, * 有的可以标记aty,比如FLAG_ACTIVITY_CLEAR_TOP * FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 记录不会出现在aty列表中,同android:excludeFromRecents='true'