Android 四大组件--activity 的 启动模式和生命周期

Activity 启动模式与生命周期

文章参考 Android基础:最易懂的Activity启动模式详解

1. 生命周期

Activity 是Android中一种展示界面的组件,负责与用户交互。它的生命周期流程图如下:
Android 四大组件--activity 的 启动模式和生命周期_第1张图片

  • 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。

  1. standard 标准模式,也是默认的一种模式,当我们启动一个 Activity 时,不管栈中是否有该 Activity 的实例,都会新建一个对象。
  2. singleTop 栈顶单例,顾名思义,该模式下的 Activity 如果是在栈顶已经有一个实例,再次启动就会复用该实例,调用 onNewIntent() 方法。反之就会新建一个对象。
  3. singTask 栈内单例,与 singleTop 不同,该模式下的 Activity 会复用栈内已经存在的 Activity,如果这个实例不在栈顶,那么该实例之上的 Activity 都会被出栈。
  4. 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)