【Android】活动的生命周期与启动模式

【Android】活动的生命周期与启动模式

活动的生命周期

返回栈

返回栈(Back Stack)是Android操作系统中用于管理用户在应用中导航历史的一种数据结构。它允许用户通过按下硬件返回键或调用系统返回功能来回到之前的操作步骤。以下是返回栈的一些关键特点和行为:

基本概念

  • 栈结构 :返回栈遵循后进先出(LIFO)的原则,即最后加入栈的 Activity 会最先被移除。
  • 导航 :当用户启动一个新的 Activity,当前的 Activity 被推入返回栈。用户可以通过返回操作回到前一个 Activity

生命周期与返回栈的关系

  • 入栈 **(Pushing)**:当一个新的 Activity 被启动时,如果 android:launchMode 不是 singleTasksingleInstance,当前 Activity 将被推入返回栈。
  • 出栈 **(Popping)**:当用户按下返回键,当前 Activity 将从返回栈中弹出,用户将返回到前一个 Activity
  • 栈顶(Top of Stack) :返回栈的顶部是当前在屏幕上显示的 Activity

返回栈的操作

  • 显式意图(Explicit Intent) :使用显式意图启动 Activity 时,可以通过设置 Intent 的标志如 FLAG_ACTIVITY_CLEAR_TOP 来影响返回栈的行为。
  • 隐式意图(Implicit Intent) :使用隐式意图时,系统可能会启动一个新的 Activity 栈。
  • finish() 方法 :调用当前 Activityfinish() 方法会将该 Activity 从返回栈中移除,用户将返回到返回栈的上一个 Activity
  • 清空返回栈 :使用 FLAG_ACTIVITY_CLEAR_TOP 标志可以清空当前 Activity 之上的所有 Activity,并将当前 Activity 作为新的栈顶。

返回栈的配置

  • AndroidManifest.xml :在应用的清单文件中,可以通过设置 Activityandroid:launchMode 属性来改变返回栈的行为。例如,singleTopsingleTasksingleInstance 等模式。
  • Intent 标志 :通过设置 Intent 的标志,如 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP 等,可以控制 Activity 启动时返回栈的表现。

活动状态

运行状态(Resumed)

  • 这是 Activity 的活跃状态,用户可以与之交互。
  • 在这个状态下,Activity 完全可见并处于交互模式。
  • Activity 从其他状态转换到运行状态时,会调用 onResume() 生命周期方法。

暂停状态(Paused)

  • Activity 部分被遮挡,但仍可见时,它进入暂停状态。
  • 例如,当一个新的 Activity 启动并覆盖当前 Activity 的部分视图,或者一个对话框弹出时。
  • 在这个状态下,Activity 仍然可见,但不在交互模式下。
  • 系统会调用 onPause() 方法,这是一个保存状态和停止动画的好地方。

停止状态(Stopped)

  • Activity 完全不可见时,它进入停止状态。
  • 这可能发生在另一个 Activity 完全覆盖它,或者当用户按返回键离开当前 Activity 时。
  • onStop() 方法会被调用,此时应该释放不需要的资源,如传感器、摄像头等。

销毁状态(Destroyed)

  • Activity 被系统销毁时,它进入销毁状态。
  • 这可能是因为内存不足,系统需要杀掉进程,或者 Activity 被明确调用 finish() 方法。
  • 在销毁之前,onDestroy() 方法会被调用,这是一个清理资源的地方,如广播接收器、注册的内容观察者等。

活动的生存期

  1. onCreate(Bundle savedInstanceState)
  • 作用 :当Activity第一次创建时调用,是进行初始化设置的地方。
  • 参数Bundle savedInstanceState 包含了先前Activity保存的状态(如果有的话)。当Activity被系统销毁并重新创建时,这个参数会传递之前保存的状态。
  • 任务 :在这里设置Activity的布局(通过调用setContentView(int layoutResID)),初始化变量,恢复状态,以及执行一次性的设置。
  1. onStart()
  • 作用 :当Activity变得可见时调用,但此时Activity可能还没有获得焦点。
  • 特点Activity已经与用户交互,但可能被其他透明的Activity覆盖。
  • 任务:在这里启动需要的资源,如注册广播接收器,开始动画等。
  1. onRestart()
  • 作用 :当Activity从停止状态恢复时调用。
  • 特点 :通常发生在用户导航离开Activity后再次返回。
  • 任务:在这里可以重新初始化数据,恢复之前的状态,或者重新获取资源。
  1. onResume()
  • 作用 :当Activity进入前台并开始与用户交互时调用。
  • 特点Activity现在是可见的并且是焦点Activity
  • 任务:在这里执行动画的开始,获取用户输入,或者执行定时任务。
  1. onPause()
  • 作用 :当Activity部分被遮挡或不再是焦点时调用。
  • 特点Activity可能仍然可见,但用户不能与之交互。
  • 任务 :在这里应该停止动画,节省资源,保存任何关键状态,因为Activity可能很快被系统销毁。
  1. onStop()
  • 作用 :当Activity不再可见时调用。
  • 特点Activity可能被另一个Activity覆盖,或者用户按了返回键。
  • 任务:在这里释放不需要的资源,如传感器、摄像头等,取消动画,停止播放音频等。
  1. onDestroy()
  • 作用 :当Activity被销毁时调用。
  • 特点 :这是Activity生命周期中的最后一个回调。
  • 任务 :在这里释放所有资源,如广播接收器、注册的内容观察者、定时器等。确保在Activity销毁时没有遗留的系统资源。

活动的启动模式

  1. standard
    1. 这是默认的启动模式。
    2. 每次启动 Activity 时,都会创建一个新的实例,并将其放入任务的返回栈中。
    3. 如果用户导航离开并再次返回,系统会重新创建 Activity 的新实例。
  2. singleTop
    1. 当使用 singleTop 启动模式启动 Activity 时,如果它已经位于返回栈的栈顶,系统不会创建新的实例。
    2. 如果 Activity 不在栈顶,或者栈顶的实例不是通过隐式意图启动的,系统将创建一个新的实例。
  3. singleTask
    1. singleTask 模式确保任务中只有一个特定 Activity 的实例存在。
    2. 当启动 Activity 时,如果任务中已经存在该 Activity 的实例,系统不会创建新的实例,而是将这个实例上面的所有 Activity 从返回栈中移除,并将这个实例带到栈顶。
    3. 这确保了 Activity 总是在任务的根位置。
  4. singleInstance
    1. singleInstance 模式确保在整个系统中只有一个 Activity 的实例存在。
    2. 当启动 Activity 时,系统会创建一个新的任务来启动这个 Activity,并且这个 Activity 总是位于任务的根位置。
      tance模式确保在整个系统中只有一个Activity` 的实例存在。
    3. 当启动 Activity 时,系统会创建一个新的任务来启动这个 Activity,并且这个 Activity 总是位于任务的根位置。
    4. 任何试图启动这个 Activity 的尝试都会重用现有的实例,并且不会创建新实例。
相关推荐
我命由我123451 小时前
ADB 之 logcat 极简小抄(过滤日志、保存日志到文件)
android·运维·adb·android studio·安卓·运维开发·android-studio
不吃饭的猪1 小时前
mysql一主2从部署
android·mysql·adb
振华OPPO2 小时前
我的5周年创作纪念日,不忘初心,方得始终。
android·java·android studio·安卓·安卓app
周杰伦的稻香10 小时前
MySQL5.7-虚拟列
android
ehviwer2311 小时前
MathType7.9绿色和谐版激活补丁包下载
android·macos·ios·cocoa·媒体
无问社区11 小时前
tp6.0.8反序列化漏洞的一些看法
android
小ᶻᶻᶻ11 小时前
使用 uni-app 开发微信小程序的详细指南
android
严文文-Chris12 小时前
【设计模式-外观】
android·java·设计模式
我又来搬代码了13 小时前
【Android】【Bug】Activity全屏(保留底部按钮)被打断变成非全屏了
android·bug
看山还是山,看水还是。15 小时前
鸿蒙OS 线程间通信
android·java·开发语言·笔记·华为·c#·harmonyos