Android(安卓)四大组件--activity 的 启动模式和生命周期
16lz
2021-01-24
Activity 启动模式与生命周期
文章参考 Android基础:最易懂的Activity启动模式详解
1. 生命周期
Activity 是Android中一种展示界面的组件,负责与用户交互。它的生命周期流程图如下:
- onCreate() : 用户不可见,创建Activity 实例时触发,在此初始化活动的基本组件:例如,您的应用程序应创建视图并将数据绑定到列表。最重要的是,您必须在此处调用 setContentView() 以定义活动用户界面的布局。
- onStart() : 用户可见但不可交互,onCreate() 之后的回调方法,
- onResume() : 用户可见并且可交互,此时 activity 位于任务栈的栈顶,捕获所以用户的输入。
- onPause() ; 用户可见,这个方法在系统准备去启动或者恢复另一个Activity的时候调用。
- onStop() : 用户不可见,这可能是因为 activity 正在被破坏,新 activity 正在开始,或者现有 activity 正在进入恢复状态并且正在覆盖已停止的活动。在所有这些情况下,停止的 activity 根本不再可见。
- onDestroy() : 销毁 activity 实例之前调用,通常在此回调中释放占用的资源。
- onRestart() : 当处于“已停止”状态的 activity 即将重新启动时,系统将调用此回调。onRestart() 从停止时恢复 activity 状态。此回调之后始终是 onStart()。
一些 activity 生命周期调用顺序
- 正常情况下,新建一个 activity A 的调用顺序为:onCreate() -> onStart() -> onResume(),此时如果按下返回键,调用顺序为 onPause() -> onStop() -> onDestroy()。
- 如果新建 activity A,之后在新建 activity B,调用顺序为:A.onCreate() -> A.onStart() -> A.onResume() -> A.onPause() -> B.onCreate() -> B. onStart() -> B.onResume() -> A.onStop(),但是如果 B 是一个窗口式的 activity,A 不会调用 onStop()
2. 启动模式
Activity有四种启动模式,standard,singleTop,singTask,singInstance。
- standard 标准模式,也是默认的一种模式,当我们启动一个 Activity 时,不管栈中是否有该 Activity 的实例,都会新建一个对象。
- singleTop 栈顶单例,顾名思义,该模式下的 Activity 如果是在栈顶已经有一个实例,再次启动就会复用该实例,调用 onNewIntent() 方法。反之就会新建一个对象。
- singTask 栈内单例,与 singleTop 不同,该模式下的 Activity 会复用栈内已经存在的 Activity,如果这个实例不在栈顶,那么该实例之上的 Activity 都会被出栈。
- singInstance 单实例模式,该模式下 activity 会另起一个任务栈来存放该 activity,并且只放一个实例,之后再创建重用该实例。
2.1 启动模式的设置
activity 的启动模式有两种设置方法,一种是在 AndroidManifest.xml 中设置,另一种是通过 Intent 设置标志位。
2.1.1 通过 AndroidManifest.xml 设置。
如果不设置则默认 standard 模式。
2.1.2 通过 Intent 设置标志位
Intent intent = new Intent(ActivityA.this, ActivityB.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);
标志位属性
标志位属性 | 含义 |
---|---|
FLAG_ACTIVITY_SINGLE_TOP | 指定启动模式为栈顶复用模式(SingleTop) |
FLAG_ACTIVITY_NEW_TASK | 指定启动模式为栈内复用模式(SingleTask) |
FLAG_ACTIVITY_CLEAR_TOP | 所有位于其上层的Activity都要移除,SingleTask模式默认具有此标记效果 |
2.2 不同之处
- Intent 的优先级大于 AndroidManifest.xml 的优先级,即以 intent 为准。
- Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP;Intent设置方式 无法设置单例模式(SingleInstance)
更多相关文章
- Android(安卓)Task:
- Android的联通性---USB的主机模式和从属模式
- Android(安卓)/ OPhone开发系列教程正在发布中……
- Android(安卓)清单目录application对应属性讲解
- Android常用小功能实例
- android中singleTask的home键的问题
- Android(安卓)MVP开发模式 google 官方Mvp架构详解(转)
- 【Android笔记 七】Android(安卓)Sensor感应器介绍(三)获取用户移
- Android学习整理 -1- Fragment 学习