一.Activity继承关系
二.activity有四个基本状态:
1.activeor running:当activity处在屏幕最上方(栈顶)时。
2.paused:当一个activity失去焦点,但仍然可见时,这种情况如有一个非全屏的透明的activity在这个activity之上,这 时候这个activity就处于paused状态。一个paused的activity是完全活在的,它保持着其状态,内存信息和与其关联的 窗口。这时的activity只有在内存极其紧张的情况下才会被系统回收。
3.stopped:当一个activity完全被另一个activity覆盖的时候,它就处于stopped状态。这时的activity保持着其状态,内 存信息,但是它的窗口被hidden了。当其他地方内存紧缺的时候该activity会被系统回收。
三.activity的生命周期:
1.activity的整个生命周期介于onCreate()和onDestroy()之间。
2.activity的可见生命区间(即出现在屏幕上,当还不可与用户交互,这时候的activity只是可见,当还没到栈顶)介于 onStart()和onStop()之间。这两个方法会随着activity的可见性被调用多次。
3.activity的前台生命区间(即activity在栈顶,并且可以与用户交互)介于onResume()和onPause()之间。这两个 状态也会被多次调用。
4.onCreate():最先被调用的生命周期,负责一些全局性的初始化,如view,data等
5.onRestart():当activity被stop后重新启动activity时就会调用该方法。
6.onStart():当activity刚出现在屏幕上,但还不是在栈顶,还不可与用户交互的时候。
7.onResume():activity在屏幕上,并且在栈顶,这时候的activity可以与用户交互。
8.onPause():与onResume()对应,当一个activity快要退出屏幕时调用该函数,一般用于保存数据和停止动画等不 耗时间的操作。这个方法最好不要做耗时的操作,因为另一个activity必须在这个函数执行完才执行后才出现。
9.onStop():与onStart()对应,当一个activity退出屏幕和栈顶的时候该函数被调用。打算在onPause()中执行的耗 时操作的停止和保存最好移到该方法中执行,而不影响前台activity的显示。
10.onDestroy():一个activity的最后生命周期,一个activity的该方法被回调一般有两种情况,一是该activity的finish ()方法被程序员调用,二是因内存等原因,该activity被系统回收了,系统回调该方法。可以通过isFinish()方法来 判断是该方法是由那种情况下发生的。
11.Android3.0之前因为当执行onPause()后该activity所在的进程有可能马上被系统kill掉,所以其onStop()和onDestroy ()可能不会被回调,所以在onPause()可能需要做一些重要数据的储存。
(Android3.0之后,能确保在onStop()之前该activity所在的进程不会马上被系统kill掉,所以可以在onStop保存重 要数据)
12.当一个activity的配置改变时,如屏幕的横竖屏切换(在不设置activity的android:configChanges),该activity会先被 destroy掉,然后再从onCreate()开始。所以这 时候需做一些资料的保存和恢复处理。当然,系统会自动帮我们做一些基 本的保存和恢复工作,如EditText若在XML里有声明id,则在屏幕旋转后其上的内容会自动保存和恢复,若没声 明 ID,则不会有这种做法。在
13.出于用户体验考虑,Android系统不会马上kill掉activity,如按back键后activity不会马上被kill掉。但Android系统 会在内存紧张时kill相对不重要的activity。activity的重要性一般来说可以分为4个等级(从高到低):
1.前台activity,:即正在与用户交互的activity,其重要性最大,一般情况下系统不会kill掉它,只有在极端情况下, 如该activity的操作引起了内存溢出,系统才会kill它。
2.可见activity(非前台):如在一个dialog后面的activity,也是很重要的,当然没前台activity重要。
3.不可见activity:那些不可见,并且其onPause()已经执行了的activity。
4.对于没有四大组件的进程,系统会很快地将其kill掉。(因此,那些需要在后台保证能够被执行完的任务需要运行 在四大组件里,如service)