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

Activity 启动模式与生命周期

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

1. 生命周期

Activity 是Android中一种展示界面的组件,负责与用户交互。它的生命周期流程图如下:
Activity 生命周期

  • 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 设置。
<activity 
			android:name=".component.ComponentActivity"
            android:launchMode="singleTask"/>

如果不设置则默认 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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值