管理Activity的生命周期

管理Activity的生命周期

当一个用户导航通过、退出或回到你的app,你的app中的Activity实例在它们生命周期的不同状态之间进行转换。例如,当你的Activity第一次被启动,它来系统的前台并接受用户的关注。在这个过程,Android系统在Activity上调用了一系列的生命周期方法,在这个Activity中你设置好用户界面和其他组件。如果用户执行动作启动了另一个Activity或切换到另一个app,Android在你的Activity上调用另一组生命周期方法,因为它移到了后台(在这里Activity不再可见,但是实例和它的状态仍然是完整的)。

在生命周期回调函数中,你可以声明在用户离开和重新进入时你的Activity是如何行动的。举个例子,如果你正在构建一个流媒体视频播放器,当用户切换到另一个app时,你可能会暂停这个视频并终结网络连接。当用户回来时,你能重新连接网络并允许你的用户从同样的点重新开始播放。

这个课程介绍每个Activity实例接收到的重要的生命周期方法,以及你该如何使用它们,使你的Activity做用户所期望它做的,当你的应用程序不需要系统资源时不会消耗系统资源。

启动一个Activity

不像其他的编程范例,app通过main()方法进行加载,对应于Activity的生命周期的不同阶段,Android系统调用特定的回调方法来启动Activity实例的代码。这里有一系列的回调方法来启动一个activity,也有一系列的回调方法来效果一个Activity。

这一课提供一个最重要的生命周期方法的概况,当创建一个你的Activity的实例是,告诉你如何应对第一个生命周期方法。

理解生命周期回调方法

在Activity的整个生命周期中,系统会按顺序调用一系列核心的生命周期方法,就像一个阶梯金字塔。也就是,Activity生命周期的每一个阶段就是金字塔的一个阶梯。当系统创建一个Activity实例,每一个回调方法将Activity的状态向顶端移动一步。金字塔的顶端就是Activity在前端运行并且能够和用户进行交互的点。

当用户开始离开这个Activity,系统调用另外的方法,将Activity的状态向下移到金字塔的底端,从而可以取消这个Activity。在某些情况下,Activity会只向下移动金字塔的一部分并等待(例如用户切换到其他的App),从这个点Activity可以重新移回顶端(如果用户返回到这个Activity),从用户离开的地方重新开始。

管理Activity的生命周期
 根据你的Activity的复杂程度,你可能并不一定需要实现所有的生命周期方法。但是,有一点很重要,你要理解每个方法并实现它们,你的app的表现方式和用户期待的一样。恰当的实现你的Activity的生命周期方法,可以确保在以下几方面表现良好,包括:

  • 当使用你的app时接到了一个电话或切换到另一个app时不会崩溃。
  • 当用户实际没有在使用它时不会占用宝贵的系统资源。
  • 当用户离开你的App并在一段时间后又回来时,不会丢失用户的进度。
  • 当屏幕在横摆和直摆之间旋转时不会崩溃或丢失用户的进度。

正如你在后面课程中将学习到的,导致一个Activity在上图所示的不同状态之间转变的情况有很多。然而这其中只有三个状态是可以静止的。也就是说,一个Activity只能在这三个状态中的某一个存在一段时间。

  1. Resumed:在这个状态下,Activity在前台运行并且用户可以与其交互。(有时也称为运行状态)
  2. Paused:在这个状态下,Activity被一个另一个Activity部分掩盖——另一个在前台运行的Activity是半透明的或者没有覆盖整个屏幕。Paused状态的Activity不能接收用户输入,也不能执行任何代码。
  3. Stopped:在这个状态下,Activity被完全隐藏了,用户看不到它;这时它被认为在后台。当停止时,Activity实例和它的状态信息例如成员变量还是被保留着的,但是它不能执行任何代码。
其他的状态(Created和Started)都是瞬时的,系统通过调用下一个生命周期回调函数马上从它们转移到下一个状态。也就是,系统在调用onCreate()方法后,很快就调用onStart()方法,紧跟着又调用onResume方法。

相关推荐