Android开发之---Activity生命周期
Android开发中,有四大组件:Activity、Service、Content Provider、Broadcast Receiver,可以说,activity的使用是最频繁的了,这里来梳理一下与activity相关的生命周期和启动模式的知识。
在正常情况下,指内存充足,有用户参与情况下,activity的生命周期过程如下图所示:

当我们启动Activity_A时,经历如下步骤:
1. onCreate函数被调用,该函数主要进行页面布局资源的初始化和数据初始化;
2. onStart函数被调用,此时页面控件树已加载完成,但是还没展示出来,还在后台
3. onResume函数被调用,此时页面显示在前台,处于活动状态 (这3步是启动一个acitivity会经历的)
4. 用户触发Activity_B启动
5. Activity_A的onPause函数被调用,在这里可以进行数据存储、动画停止等操作,但是不能进行耗时操作,让新的activity尽快显示出来,更多的资源回收可在onStop处理,否则影响Acvitiy_B的显示,因为Activity_B的onResume函数需要在Activity_A的onPause函数执行完才执行
6. Activity_A的onStop调用,回收资源 (5、6步是当前栈顶activity退出前台时会被调用)
7. 进入Activity_B
8. 用户触发返回Activity_A
9. Activity_A的onRestart函数调用,回到第二步
10. 退出Activity_A,调用次序为: onPause --> onStop --> onDestroy
Activity在Android源码的路径为:{USER_PATH}/android-5.0.0_r7_code/frameworks/base/core/java/android/app/*.java,如下:

当发生异常情况,如横竖屏变化、内存不足时,activity可能会被系统回收,这时情况如下:
默认系统会帮我们保存现场,如视图结构、已输入的部分数据,销毁时,会在onPause或onStop之后调用onSaveInstanceState,在重建activity时,在onStart后系统调用onRestoreInstanceState恢复现场。我们看看ScrollView源码怎么处理的:

scrollview的这个功能支持在4.3版本后才有的。在writeToParcel里系统保存了scrollview的滑动位置,用于后面重建activity时恢复现场。
类似的,可以看源码来了解其他控件是保存了什么数据。
如果在异常情况发生时,需要自定义保存的数据,建议使用onSaveInstanceState和onResotreInstanceState来进行处理,当然,也可在onCreate使用其传入的参数来获取,但是注意需要进行null的判断,因为第一次启动activity值是空的。
如果需要系统忽略默认的配置变化后的调用行为,可以在清单文件加入android:configChanges="..."配置,如为:android:configChanges="orientation|screenSize"(在minSDKVersion和targetSDKVersion均大于13时,需要orientation和screenSize都加上,这个和编译环境有关),那么,在横竖屏发生时,需要重写onConfigurationChanged(Configuration newConfig)来进行自定义处理,系统这是不会调用onCreate来重建activity了。除了orientation属性,local属性也很常用,在修改了app使用的语言后,重新刷新页面时用到。
Android开发之---Activity生命周期的更多相关文章
- Android开发----WebView&Activity生命周期
WebView webview是一个再应用中设置好位置和大小的浏览器,而且不会放置任何花哨的UI. 在大多数情况下,除非你调用了原生API,否则不必在webview中专门测试web应用. 首先为Web ...
- 【Android实验】第一个Android程序与Activity生命周期
目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...
- Android-管理Activity生命周期 -重新创建Activity
按照正常的app行为,很少情况下activity会销毁,只有当用户点击了返回按钮或者activity通过调用finish()发出销毁信号.系统也有可能销毁activity如果它是停止状态并且很久没有使 ...
- Android-管理Activity生命周期 -停止和重启Activity
停止和重启activity在activity的生命周期中很重要,它能让用户感觉你的app总是激活的而且不会丢失他们的进度.activity在下面的这些情况会停止和重启: 用户打开常用app窗口然后从你 ...
- Android-管理Activity生命周期 -暂停和恢复一个Activity
在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...
- Android-管理Activity生命周期 -开始一个Activity
很多程序都是从main()方法开始启动的,和其他程序不同,android是在activity生命周期的特定状态的特定回调方法中初始化代码的.activity启动和销毁的时候都用很多回调方法. 这里将要 ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Android体系结构及activity生命周期
Android的系统架构采用了分层架构的思想,如图1所示.从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核 Android的系统架构图 每层 ...
- android学习笔记 activity生命周期&任务栈&activity启动模式
activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...
随机推荐
- jprofiler_监控远程linux服务器的JVM进程(实践)
几天前写了一篇文章,jprofiler_监控远程linux服务器的tomcat进程(实践),介绍了使用jprofiler怎样监控远程linux的tomcat进程,这两天想了想,除了可以监控tomcat ...
- Python3 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- 教你一招:Excel中使用vlookup函数查询序列所对应的值
以一个简单的例子做示范,列数相对较少,看起来也比较清楚:在奥运会或其他比赛上我们可以看到各个国家的奖牌数的变化:那么我们如何查询国家对应的总奖牌数. 我们用到的函数是vlookup,它是一个纵向查询函 ...
- nginx中将POST数据写到日志里面的正确方式
http://www.cnblogs.com/meteorx/p/3188647.html
- jQuery中 pageX,clientX,offsetX,layerX的区别
一.PageX和clientXPageX和clientX ,这个两个比较容易搞混,PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化.可以理解为:相对#(0.0 ...
- XML编码utf-8有中文无法解析或乱码 C#
XML的encoding="UTF-8" ,含有中文的话(部分)会出现乱码. 网上还是很多这类问题跟解决办法的. 表现为用ie或者infopath之类的xml软件打不开这个xml, ...
- webstorm常用快捷键
常用快捷键—Webstorm入门 提高代码编写效率,离不开快捷键的使用,Webstorm拥有丰富的代码快速编辑功能,你可以自由配置功能快捷键. 快捷键配置 点击“File”-> “setting ...
- MYSQL提权方法
cve-2016-6662 MYSQL提权分析 MySQL <= 5.7.15 远程代码执行/ 提权 (0day) 5.6.33 5.5.52 Mysql分支的版本也受影响,包括: MariaD ...
- Sizzle选择器引擎介绍
一.前言 Sizzle原来是jQuery里面的选择器引擎,后来逐渐独立出来,成为一个独立的模块,可以自由地引入到其他类库中.我曾经将其作为YUI3里面的一个module,用起来畅通无阻,没有任何障碍. ...
- tyvj1089 smrtfun
背景 广东汕头聿怀初中 Train#2 Problem3 描述 现有N个物品,第i个物品有两个属性A_i和B_i.在其中选取若干个物品,使得sum{A_i + B_i}最大,同时sum{A_i},s ...