【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 的尝试都会重用现有的实例,并且不会创建新实例。
相关推荐
_小马快跑_3 小时前
ConstraintLayout 中的ImageFilterView探索:处理图片圆角、亮度、饱和度、图片重叠等
android
IT-sec4 小时前
jquery-picture-cut 任意文件上传(CVE-2018-9208)
android·前端·javascript·安全·web安全·网络安全·jquery
xiaoduyyy5 小时前
【Android】RecyclerView回收复用机制
android
林北芒大果5 小时前
【Flutter】搭建Flutter开发环境,安卓开发
android·flutter
m0_748230217 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
SunshineBrother7 小时前
Flutter求职、面试20+面试官总结:Dart篇
android·前端·flutter
鸿儒5178 小时前
利用adb工具安装卸载安卓平板(手机)软件
android·adb·智能手机
软件聚导航10 小时前
uniapp 安卓和ios震动方法,支持息屏和后台震动,ios和安卓均通过测试
android·ios·uni-app
zhangphil11 小时前
Android叠加双RecyclerView ScaleGestureDetector AnimatorSet动态放大缩小,Kotlin(1)
android·kotlin
studyForMokey11 小时前
【Android零碎笔记】
android·笔记