当前位置: 首页 > news >正文

Android - Activity生命周期

Activity状态:

① 当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者running 的状态

② 如果一个Activity 失去焦点(focus)但还看得到它的画面(比如:一个新的Activity 画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的Activity 则处在paused 的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity 自己本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager 保持联系着),像这种paused 的Activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,把不重要的Activity 移除。

③ 如果一个Activity 被其它的Activity 完全的遮盖住时,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop 状态的Activity 时最先被系统考虑拿下来释放内存的。

④ 当一个Activity 处于pause 或stop 的状态时,系统可以要求Activity 结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。

Additional:

在系统中,所有的Activities都是被作为Activity栈来管理的。当一个新Activity被开始执行了,就被放到栈顶并成为可运行Activity,原来栈顶的Activity自然在他下面,并且不在显示给用户直到刚才新的Activity退出。

一个Activity有必要的四个状态:

A、活动状态:如果一个Activity在屏幕的前面(也就是在栈顶),它就是活动状态或运行状态。

B、暂停状态:如果一个Activity失去了焦点但是仍然可见(也就是一个新的但是是非满屏或透明的Activity在自己上面),但将被暂停,一个暂停的Activity完全是活的(它维持所有的状态和成员信息并保持与窗口管理器的连接),但在系统内存极度低的时候,能被系统kill.

C、停止状态:如果一个Activity完全被另外一个Activity遮蔽,就处于停止状态。它仍然保持所有状态和成员信息,然而它不在对用户可见,窗口被隐藏,当系统无论何时需要内存资源时,它经常被killed.

D、重新恢复状态:只有“暂停状态”与“停止状态”的Activity可以进入“重新恢复状态”,当它再次呈现到用户时,它必须完全重新启动并恢复它以前的状态。


Activity 状态转换图:

Activity生命周期中,三个主要的循环周期可能比较关键:

A、完整生命周期:从调用onCreate(Bundle)开始到调用onDestroy()结束,当调用onCreate(Bundle)时,Activity将初始化一些全局状态,当调用onDestroy()时,释放所有拥有的资源。例如,如果需要一个线程在后台从网络上下载数据,可以在onCreate(Bundle)创建它,在onDestroy()中销毁它。

B、可视的生命周期:从onStart()开始直到一个相应的onStop()被调用。在这期间,虽然用户可以在屏幕上看到这个Activity,但是由于这个Activity不是屏幕的最前面,故不能交互,在这两个方法之间,你可以维持相应的资源以便这个Activity显示给用户时需要。例如,你可以在onStart()方法中注册一个BroadcastReceiver去监控界面变化,当用户不需要时,也可以在onStop()中撤销。onStart() and onStop()方法可以多次被调用,以便实现这个Activity对用户时而可见、时而消失。

C、最前面生命周期:从onResume()开始直到相应的onPause()调用。在这期间,这个Activity在所有别的的Activities前面以便与用户交互。这二个方法之间的交互是经常的事情。例如当设备休眠、一个Activity的结果需要转送,一个新Intent需要转送等等。所以这些方法中的代码尽量保持轻量级的。

相关文章:

  • maven scope使用和理解
  • JavaScript数组
  • freemarker自定义标签
  • [转]使用JQuery读取XML文件数据
  • android安装
  • jQuery 读xml并search
  • IO模型介绍 以及同步异步阻塞非阻塞的区别
  • IDEA的查询引用、调用关系图的功能(转)
  • 【不抱怨21天】第一天 - The First Day
  • 201521123054《Java程序设计》第8周学习总结
  • DataTable与Xml的相互转化
  • 【转】C#三大特性之 封装、继承、多态
  • POJ3664
  • js不重复导入
  • 压缩文件函数库(转载)
  • [PHP内核探索]PHP中的哈希表
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Java知识点总结(JavaIO-打印流)
  • Laravel 实践之路: 数据库迁移与数据填充
  • Laravel核心解读--Facades
  • mongodb--安装和初步使用教程
  • PV统计优化设计
  • Redis字符串类型内部编码剖析
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 机器学习 vs. 深度学习
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端设计模式
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • mysql面试题分组并合并列
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​香农与信息论三大定律
  • (¥1011)-(一千零一拾一元整)输出
  • (1) caustics\
  • (6)STL算法之转换
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (接口自动化)Python3操作MySQL数据库
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三分钟)速览传统边缘检测算子
  • (五)网络优化与超参数选择--九五小庞
  • (一)80c52学习之旅-起始篇
  • (转) ns2/nam与nam实现相关的文件
  • (转)visual stdio 书签功能介绍
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】