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 使用场景:应用程序 ...
随机推荐
- 多兼容的JS获取鼠标坐标
//第一.相对于屏幕 function getMousePos(event) { var e = event || window.event; return {'x':e.screenX,'y':sc ...
- RabbitMQ 参数们的Power “续”
参数中的 arguments 之前讲参数的一些作用的时候,忽略了最后一个字典类型的参数,因为这个参数是大有文章的,值得单独进出来说道说道. 这时,就不得不打开我们的 Web UI管理系统了,可以看到在 ...
- Git for Windows - The Program can't start because libiconv2.dll is missing
今天在新装的win10 预览版上面,发现git不能启动了,提示信息主要是: The Program can't start because libiconv2.dll is missing 于是我在网 ...
- WinForm------GridControl单元格内容修改外表样式
private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDra ...
- C#中精确计时的一点收获 【转】
C#中精确计时的一点收获 [转] 以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @ 3.00GHz 2.99GHz,2.96G ...
- Javascript的setTimeOut()和setInterval()的定时器用法
Javascript用来处理延时和定时任务的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请 ...
- [Data Structure & Algorithm] 八大排序算法
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...
- HQL常用的查询语句
摘录自某人,比较有用,比较全. // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // ...
- 【总结】/etc/rc.d/rc.local 与 /etc/profile .bash_profile .bashrc 文件执行顺序
登陆shell与交互式非登陆shell的区别 登录shell 所谓登录shell,指的是当用户登录系统时所取的那个 shell.登录shell属于交互式shell. 登录shell将查找4个不同的启动 ...
- 新语言代码高亮及Windows Live Writer插件开发
最近在博客园做一些学习笔记.一个是看apple的swift官方书,另外一个是随学校课堂(SICP)学习scheme. 这两种语言都谈不上普及(或者说swift太新).博客园原来的windows liv ...