Activity分析(上)

一.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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值