第一章01-正常情况下Activity的生命周期
一、Android下能见到的界面
- Window
- Dialog
- Toast
- Activity
二、Activity的生命周期分析
- 典型情况下的生命周期
- 是指在有用户参与的情况下,Activity所经过的生命周期的改变,典型情况即正常情况下的生命周期
- 异常情况下的声明周期
- 是指Activity被系统回收或者由于当前设备的Configuration发生变化从而导致Activity被销毁重建时生命周期的改变
2.1 典型情况下的生命周期分析
在正常情况下,Activity会经历如下的生命周期
- onCreate
- 表示Activity正在被创建,这是生命周期的第一个方法
- 在这个方法中,可以做一些初始化工作,比如:调用setContentView去记载界面布局资源、初始化Activity所需的数据等
- onRestart
- 表示Activity正在重新启动,一般情况下,是在当前Activity从不可见变为可见状态时,onRestart方法就会被调用,这种情形一般是用户行为所导致。
- onStart
- 表示Activity正在被启动,即将开始,这是Activity已经可见了,但是还没有出现在前台,还无法和用户进行交互。
- 这个时候其实可以理解为Activity已经显示出来了,但是我们还看不到。
- onResume
- 表示Activity已经可见了,并且出现在前台并开始活动。
- 需要注意,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。
- onPause
- 表示Activity正在停止,正常情况下,紧接着就会调用onStop
- 在特殊情况下,也是极端情况,如果这个时候快速地再回到当前Activity,那么onResume会被调用
- 在该方法中可以做一些存储数据、停止动画等操作,但是注意不能太耗时,因为这会影响新Activity的现实,onPause必须先执行完,新Activity的onResume才会执行
- onStop
- 表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时
- onDestroy
- 表示Activity即将被销毁,这是Activity生命周期中的最后一个回调
- 在这里,我们可以做一些回收工作和最终的资源释放
问题:
- onRestart方法执行完,会执行什么方法?
- 书中的流程图给出的是,onRestart->onStart->onResume(当用户再次回到原Activity时候的执行流程)
- 在执行onStart方法的时候,界面是否可见?
- 书中解释,onStart方法执行的时候,Activity已经显示,但是我们还看不到,因为此时的Activity还在后台,在执行onResume的时候才显示到前台
- onPause执行完,界面是否可见?
- 书中流程图注明,执行完onPause后,Activity已经不可见,然后才执行onStop
总结:
- 在当前Activity不可见的时候,会执行onStop,接下来会出现以下3中可能的情况:
- 用户返回原Activity,会执行onRestart方法
- 高优先级的应用需要内存的时候,应用会被杀死,当用户返回原Activity的时候,会重新执行onCreate方法
- Activity正在停止或者即将被销毁,会执行onDestroy方法
- 如果用户打开的新的Activity采用了透明主题,那么当前Activity不会回调onStop方法
- 当Activity被系统回收后再次打开,生命周期方法回调过程和默认的一样,注意只是生命周期方法一样,不代表所有过程都一样
- onCreate和onDestroy配对,分别标识着Activity的创建和销毁,并且只可能有一次调用
- onStart和onStop配对,随着用户的操作,界面是否可见,这两个方法会被调用多次
- onResume和onPause配对,同上,不过它们是根据Activity是否位于前台,这两个方法也会被调用多次
Activity的启动过程
- 启动Activity的请求会由Instrumentation来处理,然后它通过Binder向ActivityManagerService(AMS)发请求
- AMS内部维护者一个ActivityStack并负责栈内Activity的状态同步,AMS通过ActivityThread去同步Activity的状态,从而完成生命周期方法的调用
- 在ActivityStack中的resumeTopActivityInnerLocked方法中会有以下逻辑:
- We need to start pausing the current activity so the top one can be resumed...
- 新Activity启动之前,栈顶的Activity需要先onPause后,新Activity才能执行onStart
- 在一个ActivityA中打开ActivityB的时候
- ActivityA先执行onPause
- ActivityB执行onCreate,onStart,onResume
- ActivityA接着执行onStop
Android官方文档对onPause的解释有这么一句:
不能在onPause中做重量级的操作,因为必须onPause执行完成以后新Activity才能Resume。
通过分析这个问题,我们知道onPause和onStop都不能执行耗时操作,尤其是onPause,这也意味着,我们应当尽量在onStop中做操作,从而使得新Activity尽快显示出来并切换到前台
第一章01-正常情况下Activity的生命周期的更多相关文章
- 第一章02-异常情况下Activity的生命周期
异常情况下的生命周期分析 1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建 比如,屏幕旋转,默认情况下Activity会被销毁并且重新创建,不过我们也可以阻止系统重新创建我们的Ac ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Android之Activity的生命周期
PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...
- 浅谈Android中Activity的生命周期
引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...
- 第一章:Activity的生命周期和启动模式
Activity是Android中四大组件之首,所以需要重视,尤其是启动方式,在AndroidManifest.xml中的注册信息 (一)Activity的生命周期 1.1.1 正常情况下的生命周期 ...
- 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...
- Android开发艺术探索读书笔记——01 Activity的生命周期
http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...
- Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期
先给出结论:Dialog和AlertDialog并不会影响到Activity的生命周期,但会影响到Activity的优先级. 核心代码: onCreated中: Resources resources ...
- 第三章:Activity的生命周期
一:Activity的生命周期方法 Android提供了很多Activity的生命周期方法,比如我们常用的onCreate.onPause.onResume等.这里主要介绍粗粒度的周期方法,诸如onP ...
随机推荐
- RobotFramework自动化测试之元素定位
前言:最近在做基于RF框架的Web自动化测试,其中涉及到元素的定位,主要用到id.name.xpath.css四中定位方法,尤其后面的两种方法特别有效,可以解决大部分的定位问题. id和name定位 ...
- 学习ASP.NET Core(06)-Restful与WebAPI
上一篇我们使用Swagger添加了接口文档,使用Jwt完成了授权,本章我们简答介绍一下RESTful风格的WebAPI开发过程中涉及到的一些知识点,并完善一下尚未完成的功能 .NET下的WebAPI是 ...
- MySQL InnoDB索引介绍以及在线添加索引实例分析
引言:MySQL之所以能成为经典,不是没有道理的,B+树足矣! 一.索引概念 InnoDB引擎支持三种常见的索引:B+树索引,全文索引和(自适应)哈希索引.B+树索引是传统意义上的索引,构造类似二叉树 ...
- 基于Javaee的影视创作论坛的设计与实现
基于Javaee的影视创作论坛的设计与实现主要用功能包括: 首页推荐.用户管理.影片管理.评论管理. 预告片管理.海报管理.公告管理.数据检索.用户注册与登录等等功能.统结构如下 (1)后台管理: 管 ...
- 【Java】Scanner类nextInt后使用nextLine无法读取输入
首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题, 在使用过程中 ...
- 使用vue2.0创建的项目的步骤
1.由于vue项目依赖 node.js npm 需要先安装. 若没有请先安装,请百度 //检查是否有node.js npm vue win+r 输入cmd 输入node -v 回车 会出 ...
- iOS 的尾调用优化原理
背景: 今天聊代码规范的问题的时候说了一下尾调用的问题. 一:概念: 什么是尾调用? 尾调用(Tail Call):某个函数的最后一步仅仅只是调用了一个函数(可以是自身,可以是另一个函数). 注意 “ ...
- Xilinx的DocNav文件导航中的文档开头字母缩写都是什么意思?
在安装Xilinx的开发软件后都会附带安装一个用于查阅Xilinx技术文档的文件导航工具DocNav. 在DocNav中可以找到几乎所有对我们开发Xilinx FPGA有用的技术文档,其中的文档数量更 ...
- COLA的扩展性使用和源码研究
cola扩展点使用和设计初探 封装变化,可灵活应对程序的需求变化. 扩展点使用 步骤: 定义扩展点接口,类型可以是校验器,转换器,实体: 必须以ExtPt结尾,表示一个扩展点. 比如,我定义一个云枢的 ...
- 《计算机网络》课程笔记 (Ch03-运输层)
为运行在不同主机上的应用进程之间提供逻辑通信功能. 将应用层报文切分为块,然后加上运输层首部,形成报文段,交付给网络层. 多路复用与多路分解 将网络层提供的主机到主机交付服务延伸到进程到进程交付服务. ...