Activity-活动,是Android APP编程不可缺少的,也是Android四大控件之一。了解activity的生命周期很重要,是后续app编程的基础,只有对activity的生命周期有深如的了解,才能写出好的程序。之前也看过不少关于activity生命周期的博客,很多都是只是贴出一个官方出的生命周期图,对于刚开始接触android的人来说,一开始可能并没有很好的理解。其实最好的方法就是自己动手编写一个app,实际看一下才是最有效果的。下面也就是自己动手编写app实践后的一些总结。
首先Android中activity是可以层叠的,在一个app内,每启动一个新的activity,新的activity就会覆盖到之前的activity上,Android使用栈来管理activity,栈的特点就是先进后出的数据结构;当我们新启动一个activity时,就会入栈并处于栈顶,当activity被销毁时,就会出栈。系统总是会显示处于栈顶的activity。
1、activity状态
每个activity在其生命周期中最多可能有四种状态:运行状态,暂停状态,停止状态,销毁状态。
运行状态:一个activity位于栈顶时,这时activity就处于运行状态。
暂停状态:一个activity不再处于栈顶但仍然可见时,这时activity就处于暂停状态。你可能会疑惑,activity都不在栈顶了怎么还可见呢?这是因为并不是所有的activity都是占满整个屏幕的,例如dialog类型的activity,只是占用屏幕中心的一部分,这个时候也是可以看见后面的activity,这时后面的activity就处于暂停状态。
停止状态:当一个activity不再处于栈顶位置并且完全不可见的时候,activity就处于停止状态。处于停止状态的时候,activity有可能被系统回收。
销毁状态:当一个activity从栈中移除后就处于销毁状态。
activity在这四种活动状态下,处于暂停、停止和销毁这三种状态下在系统内存极低的情况下是很容易被系统回收的,系统最倾向回收销毁状态的activity,其次是停止状态,最后是暂停状态下的activity。
2、activity的回调方法
Activity类中定义了一下七个回调方法,覆盖了activity生命周期的每一个环节:
onCreate():当activity第一次创建时被调用,一般都在这个方法中完成布局加载、控件初始化、事件绑定等初始化操作。
onStart():当activity由不可见变为可见的时候被调用。
onResume():activity可以和用户交互时调用,这个时候activity处于栈顶。
onPause():系统准备去启动或者恢复另一个activity时调用,通常会在这个方法将消耗CPU的资源释放掉,以及保存一些关键的数据,但是需要注意的一点就是在这个方法中执行的速度一定要快,要不然会影响新的栈顶activity的使用。
onStop():当activity完全不可见的时候调用,与onPause的区别就是如果新启动的activity是dialog类型的,onPause方法就会执行而onStop就不会执行。
onDestroy():当activity被销毁之前调用,方法执行完后activity变为销毁状态。
onRestart():当activity有停止状态变为运行状态之前调用,也就是activity被重新启动了。
以上七个方法中除onRestart方法外,其余的六个方法均是两两相对的。