Activity的生命周期

Activity是Android四大组件之一,是与用户交互的一个重要组件。在使用每一个Activity时,都需要在AndroidManifest.xml中进行相应的<activity>声明。

 

返回栈

Android使用任务(Task)来管理活动,一个任务就是一组存放在栈里的活动的集合,这个栈叫做返回栈(Back Stack)。栈是一种后进先出(Last In, First Out, LIFO)的数据结构,好比一个装积木的盒子,这个盒子就是返回栈,而一个个活动就是一块块积木。系统总是会显示处于栈顶的活动给用户。

当启动了新活动,它就会入栈并处于顶端位置,相当于把一块新的积木放到了盒子中并处于其他积木之上。

而当活动被销毁,处于栈顶的活动将会出栈,前一个活动将重新回到栈顶位置,相当于把最顶端的那块积木拿出盒子。

 

活动的状态

每个活动在生命周期中有四个状态:

  1. 运行状态(running)
    • 当一个活动在屏幕的前景(在返回栈的顶端),与用户直接交互的时候,活动就处于运行状态;
  2. 暂停状态(paused)
    • 当一个活动失去了焦点但是仍然可见(已经不在栈顶),即处于暂停状态。仍然可见指的是有其他并非全屏的活动(如对话框形式)占据了屏幕,而还是可以见到后方的处于暂停状态的活动。暂停状态的活动仍然是存活着的(所有状态及成员信息仍然依附在Window Manager中),但是在内存特别低的时候仍然有可能被系统回收。
  3. 停止状态(stopped)
    • 当一个活动不再栈顶,也完全不可见的时候,活动处于停止状态。此时所有状态和成员信息仍然存在,但是容易在内存低的时候被回收。
  4. 销毁状态(destroyed)
    • 从返回栈中移除的活动就变成销毁状态。

 

活动的生存期

Activity的生命周期有以下七个回调方法:

  1. onCreate():活动第一次创建时会使用,通常在该方法中需要完成各种初始化操作,如加载布局,绑定和触发等事件。
  2. onStart():在活动从不可见变为可见时调用。
  3. onResume():在准备好于用户交互时调用,此时活动就会处于返回栈栈顶,并开始运行。
  4. onPause():启动和恢复其他活动是调用,通常在该方法中释放一些CPU资源,保存关键数据。该方法执行速度要快才能不影响其他活动的启动。
  5. onStop():其他活动并使原来的活动完全不可见时,onStop()方法就会调用。
  6. onDestroy():在销毁之前调用,调用后活动就变成销毁状态。该方法发生在调用了finish()方法或者系统自动回收时。
  7. onRestart():在活动由停止状态变为运行状态之前调用。

活动的生存期可分为三类:

  1. 完整生存期(entile lifetime):在onCreate()和onDestroy()之间经历的。在onCreate()初始化操作,在onDestroy()释放内存。
  2. 可见生存期(visible lifetime) :在onStart()和onStop()之间经历的,在此期间活动一直可见。在onStart()加载资源,在onStop()释放资源。
  3. 前台生存期(foreground lifetime):在onResume()和onPause()之间经历的,在此期间活动总是处于运行状态且可交互的。

下图是Android官方提供的活动生命周期图:

  • 一般来说我们第一次启动一个活动A,它将自动执行onCreate()、onStart()、onResume()方法,并开始处于运行状态。
  • 当有其他活动启动到前台时,如果活动A仍然可见,则执行onPause()方法使其处于暂停状态,当活动A重新回到栈顶时,就执行onResume();如果活动A完全不可见了,则执行onPause()和onStop()方法使其处于停止状态,回到栈顶时就执行onRestart()和onResume()方法。假设在活动A运行状态时,启动了活动B,那么它们的执行顺序如下:
    • A--onPause();
    • B--onCreate();
    • B--onStart();
    • B--onResume();
    • A--onStop();
  • 在暂停状态和停止状态都有机会被系统回收,只是停止状态比暂停状态更容易被回收。
  • 活动A被销毁时就会执行onDestroy()方法。

最后用《安卓权威编程指南》的另一张图来说明调用方法之后和活动生存期之间的关系,我们可以看到执行每个方法后活动状态的改变:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值