这是我参与「第四届青训营 」笔记创作活动的的第2天
一、概念
Activity它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用于显示用户界面,用户通过Activity交互完成相关操作 , 一个App允许有多个Activity。
二、生命周期
1、在官网中我们可以清楚的了解到他们的继承关系,子类等信息
2、生命周期的流程图
官方:
3、常见场景的生命周期流程流转
| 启动 | onCreate() - onStart() - OnResume() - Resumed |
| 退出 | Resumed - onPause() - onStop() - onDestroy() |
| 部分覆盖 | Resumed - onPause() - Paused |
| 部分遮挡恢复 | Paused - onResume() - Resumed |
| 完全覆盖 | Resumed - onPause() - onSaveInstanceState() - onStop() - Stoped |
| 完全遮挡恢复 | Stoped - onStart() - onResume() - Resumed |
| 后台回收 | Stoped - Killed |
| 回收恢复 | Killed - onCreate() - onStart() - onRestoreInstanceState()- onResume() - Resumed |
| 配置改变 | Resumed - onSaveInstanceState() - onPause() - onStop() - onDestroy() - onCteate() - onStart() - onRestoreInstanceState() - onResume() |
三、启动模式
问题驱动:
- 有时候我们的App需要生成给其他App调用的Activity,例如浏览器应用,照相机应用
- 解决生成重复页面等等Bug
- 任务栈过深的时候,避免一直按返回键也退不回想要的页面
| standard | Activity默认模式,所有的Activity遵循元素进栈出栈的特性 |
| singleTop | 栈顶复用模式,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。避免栈顶的activity被重复的创建。 |
| singleTask | 栈内复用模式,如果要启动的Activity在当前栈内启动,activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并且清空这个activity任务栈上面所有的activity。 |
| singleInstance | 单一实例模式,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。 |