Activity生命周期

首先要知道的是,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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值