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
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
使用 JavaScript 编写的 Squareshooter 游戏及其源代码   项目:使用 JavaScript 编写的 Squareshooter 游戏(附源代码) 这款游戏是双人游戏。这是一款使用 JavaScript 编写的射击游戏,带有门户和强化道具。在这里,每个玩家都必须控制方形盒子(作为射手)。这款射击游戏的主要目标是射击对手玩家以求生存。当它射击对手时,它会获得一分。 游戏制作 该游戏仅使用 HTML 和 JavaScript 开发。该游戏的 PC 控制也很简单。 对于玩家 1: T:朝你上次动作的方向射击 A:向左移动 D:向右移动 W:向上移动 S:向下移动 对于玩家2: L:朝你上次移动的方向射击 左箭头:向左移动 右箭头:向右移动 向上箭头:向上移动 向下箭头:向下移动 游戏会一直进行,直到您成功射击对手或对手射击您为止。游戏得分显示在顶部。所有游戏功能均由 JavaScript 设置,而布局和其他次要功能则由 HTML 设置。 如何运行该项目? 要运行此项目,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要运行此游戏,首先,通过单击 index.html 文件在浏览器中打开项目。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值