Activity生命周期

来源:互联网 发布:ni软件什么用 编辑:程序博客网 时间:2024/06/16 18:42

其实这篇我是想转一发来着的,但是看了半天没看到什么满意的,好不容易看到一篇还不允许转载………….

那么还是自己来吧,以下是我的一些对官方文档的理解和对自己所看书籍知识的回忆


首先要知道的是,Android使用Task来管理活动,一个Task就是一组存放在栈里的活动的集合,这个栈被称作返回栈(Back Stack)

从数据结构的知识我们可以知道,栈是一种后进先出的数据结构,在默认情况(Activity有四种启动模式,请详情点击)下,当我们启动一个新的Activity,它会在返回栈中入栈并处于栈顶的位置。当我们按下Back键或者调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,那么前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。


下面上图:
Android Lifecycle

这是一幅Activity生命周期流程图,这些矩形方框里是一些回调方法,当Activity在两个状态切换时,我们可以重写这些回调方法来执行我们想要的操作。


  • 活动状态
    Activity在生命周期里最多有四种状态
    1.运行状态当活动位于栈顶时,活动就处于运行状态。

    2.暂停状态当活动失去了焦点但仍然可见时就进入了暂停状态,此时该活动已经不在栈顶。(举个栗子,一个对话框位于栈顶,但它并不会占满整个屏幕,此时后面的那个Activity就位于暂停状态)。处于暂停状态的活动时完全存活的,除非在内存极低的情况下,系统才会去考虑回收这种活动。

    3.停止状态当活动被其他活动完全遮盖不再处于栈顶位置的时候,就进入了停止状态。系统仍然会为这种活动保存相应的状态和成员变量,但这并不完全可靠,当其他地方需要内存的时候,处于停止状态的活动有可能会被系统回收。

    4.销毁状态当一个活动从返回栈中移除后就变成了销毁状态。当我们想要再将这个Activity展现给用户的时候,必须要完全重新开始和修复到之前的状态。系统最倾向于回收处于这种状态的Activity,从而保证手机的内存充足。


  • 回调方法

    1.onCreate():所有的Activity都会实现这个方法。它会在Activity第一次被创建的时调用。我们应该在这个方法中完成活动的初始化操作,比如加载布局,绑定事件等等。

    2.onStart()当Activity由不可见变为可见时调用该方法。接着它后面的是onResume()或onStop()。

    3.onResume()当activity开始要和用户进行交互的时候调用该方法。这个时候Activity一定位于栈顶的位置,并且处于运行状态。

    4.onPause()当系统准备去启动或者恢复另一个Activity时调用。我们通常会在该方法中保存一些没有保存的关键数据,释放动画或其他消耗CPU的资源。这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

    5.onStop()当Activity完全不可见时调用该方法。注意是完全不可见,比如新活动是一个对话框的时候,执行的就应该是onPause()而不是onStop()。

    6.onDestroy()这个方法在Activity被销毁之前调用,这之后activity就将处于销毁状态。

    7.onRestart()这个方法在Activity重新启动时调用,就是已经停止了,又要转向运行状态的时候调用。由图也可知这个方法后面后面总是onStart()。


  • 活动生存期
    由上面的回调方法又可以将Activity分为三种生存期。

    1.完整生存期Entire lifetime)——Activity在onCreate()方法和onDestroy()方法之间所经历的就是完整生存期。Activity会在onCreate()方法中完成各种初始化操作,在onDestroy()方法中完成释放内存的操作。

    2.可见生存期Visible lifetime)——Activity在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在这段生存期内,Activity对于用户一直可见,即便可能有些无法与用户进行交互。我们可以使用这两个方法,管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的Activity不会占用太多内存。

    3.前台生存期Foreground lifetime)——Activity在onResume()方法和onPause()方法之间所经历的,就是前台生存期。在前台生存期内,Activity总是处于运行状态的,此时的Activity是可以与用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。


知识点参考自Android官方文档及《第一行代码》/郭霖

0 0