Android学习笔记--Activity的生命周期

 

Activity的生命周期

 

       Activity通过一个Activity栈来进行管理。当一个新的Activity启动的时候,它会首先被放置在Activity栈顶部,并且该 Activity的状态为Running,之前的Activity也在Activity栈中,但是被保存在它的下边,只有当这个新的Activity推出之后,以前的Activity才能重新回到前景界面。


Activity有四种基本状态:

       Active/Running:一个新的Activity启动入栈之后,它位于屏幕的最前端,Activity栈的最顶端,此时它处于可见并可以和用户交互的状态。

       Paused:Activity失去了焦点,但仍然可见,这时为Paused状态。例如,被另一个透明的或者Dialog样式的Activity覆盖时的状态。因为失去了焦点,故不可与用户交互。

       Stopped:当Activity被另一个Activity完全覆盖、失去焦点,并不可见,这叫处于Stopped状态,它仍然保持着所有的状态和成员 信息,但对于用户来讲,它是不可见的。当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。

       Killed Activity:被系统杀死回收或者没有被启动时处于Killed状态。Activity为Paused或者Stopped状态,系统需要清理内存时, 可以通过finish或者kill结束其进程。当需要重新显示时,必须完全启动,并将其关闭之前的状态全部恢复。


Activity有三个关键的生命周期:

1.   完 整生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在 onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在 onCreate()中创建线程,在onDestory()中停止线程。

2.   可见的生命周期,从onStart()开始到 onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的 UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在 onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。

3.   前 台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。

 

Activity类中定义了8个方法,可以通过重写这些方法达到在Activity转改改变时执行你所期望的操作。当实现这些方法是,需要注意的是一定要调用父类的对应方法。


public class Activity extendsAplicationContext {

     protected void onCreate(Bundle icicle);

     protected void onStart();

     protected void onResume();

     protected void onFreeze(Bundle outIcicle);

     protected void onPause();

     protected void onStop();

     protected void onDestroy();

}


 上述方法的含义用下表解释:


方法描述完成后可否被杀掉?下一个方法
onCreate(Bundle)

Activity初次创建时调用该方法。一般情况下,我们会重写该方法,并作为应用程序的入口,在这个方法中可以进行初始化数据、设置用户界面等操作。大多数情况下,我们需要在这里加载用户界面xml资源文件,例如setContentView(R.layout.main),如果Activity之前存在冻结状态,那么此状态将在Bundle中提供,如果Activity首次创建,本方法后将会调用onStart()方法,如果Activity是停止后重新显示,将调用onRestart()方法。

onStart()

onStart()

该方法在onCreate()方法之后被调用,或者在从Activity从Stopped状态转换为Active状态时调用。其后调用onRestart()方法或者onResume()方法。

onResume()

onStop()
onRestart()

当Activity从停止状态重新启动时调用。其后调用Resume()方法。

onStart()
onResume()当Activity将要与用户交互时调用此方法,此时Activity在栈顶,用户输入已经可以传递给它。如果其它的Activity在它的上方恢复显示,则将调用onFreeze()方法。onPause()
onFreeze(Bundle)当Activity暂停,其它的Activity恢复与用户交互的时候调用这个方法。  
onPause()当系统要调用其他的Activity时调用,一般该方法用来提交数据的改变,停止动画,和其它占用CPU资源的东西。如果Activity重新回到前景则调用onResume()方法,如果对用户彻底不可见则调用onStop()方法。onResume()

onStop()
onStop()当其他Activity恢复并遮盖此Activity,导致此用户不可见时调用。当Activity重新回到前景与用户交互时调用onRestart()方法,如果Activity将退出则调用onDestroy()方法。onRestart()

onDestroy()
onDestroy在Activity被销毁前调用的最后一个方法,当进程终止时会出现这种情况(调用Activity提过的一个finish()方法或者系统为了节省空间而临时销毁Activity的实例,可以通过isFinishing()方法返回值区分这两种情况)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值