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()方法。

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

Activity的生命周期相关推荐

  1. Activity的生命周期是谁调用的?

    我们知道Activity的生命周期包括onCreate.onStart.onResume.onRestart.onStop.onDestory.onSaveInstanceState.onRestor ...

  2. 横竖屏切换时候Activity的生命周期

    曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activi ...

  3. Android开发---Activity的生命周期

    在Android开发中,第一步学习的应该是最基础的东西,即Activity的声明周期,相信Activity对于从事Android开发的朋友都很熟悉,这里作者不多做解释.Android的生命周期可以用如 ...

  4. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  5. Activity的生命周期理解

    Activity拥有4个基本状态: 活动状态:当前Activity位于前台,可以看见也可以获得焦点,可以接受用户输入的 暂停状态:其他Activity位于前台,该Activity依然可见,但是不能获得 ...

  6. android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...

    android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...

  7. Android学习笔记系列四2 —— Activity的生命周期

    2019独角兽企业重金招聘Python工程师标准>>> 启动一个Activity 使用startActivity(Intent intent). intent指定了你想要启动的act ...

  8. activity 生命周期_从0系统学Android-2.4 Activity 的生命周期

    本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 本系列持续更新中-. 2.4 Activity 的生命周期 掌握 Activity 的生命周期对于开发者来说是非常 ...

  9. Android下Activity的生命周期

    Activity的生命周期如上图所示.当系统调用一个活动时,每个回调函数依次调用. 转载于:https://www.cnblogs.com/hainange/archive/2013/04/25/61 ...

  10. android activity 回调函数,Android Activity的生命周期

    Activity的生命周期 Android系统根据activity的所处不同阶段对应的唤起其特定的回调函数来执行代码.activity的一系列有序的生命周期回调函数.本文将来讨论下activity各阶 ...

最新文章

  1. ACMMM2017 | 电子科大斩获最佳论文!中科院自动化所多媒体计算组获得IEEE期刊最佳论文!
  2. 《树莓派开发实战(第2版)》——2.8 利用VNC远程控制树莓派
  3. 写作—开启技术成长之路
  4. 不是每个人都可以坚持!
  5. pcl画圆球_PCL之轨迹绘制(二)
  6. 双十一京东PLUS会员 VS 阿里88VIP,谁的羊毛多?
  7. VR来了,科技的各行各业要如何做好准备?
  8. python灰度处理_python 简单图像处理(9) 灰度变换
  9. word 软换行与硬换行
  10. 【html、CSS、javascript-11】jquery-事件使用方法总结
  11. 网易电子邮箱的文档功能是什么?
  12. CentOS服务器ntpdate同步及使用ntpdate同步时钟服务器时间
  13. nodejs初学者大全
  14. CCRC信息安全服务资质认证流程知识点汇总
  15. 三星和华为均发布了5G手机芯片,谁的性能更强?
  16. C4D——建宜家小闹钟
  17. 一图全解芯片制造的全过程
  18. java游戏spa,【Vue的路由,SPA概念】
  19. ESPHome 和 Home Assistant点灯握手
  20. 从Oracle迁移到PostgreSQL的十大理由

热门文章

  1. html 自定义打印模板,如何自定义打印模板
  2. 硬件设计1---什么是硬件工程师?
  3. 基于DFA算法的敏感词过滤的go语言实现
  4. 《JavaScript函数式编程思想》——从面向对象到函数式编程
  5. 对偶式与反函数_对偶式和反函数什么关系,是不是都是一样,还是怎么回事啊,...
  6. 财务应付结算系统设计-发票(含账单发票差异调整)
  7. PS可以快速批量修改图片尺寸吗?
  8. 高数 | 【多元函数微分学 计算篇】链式求导法、隐函数求导法、全微分形式不变性、多元函数求极值
  9. 英语基础语法学习笔记 0
  10. ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER