一、前言
活动是Android应用程序的基本构建块,他们可以在许多不同的状态存在。当你把一个Android程序置于后台,过一段时间再打开发现之前的数据还存在。
二、活动状态
下面的图表说明了一个活动可以通过在其生命周期中的状态:
三、活动的生命周期
这里我们借助一张图帮助我们理解:
1.Oncreate
这是活动被创建执行的第一个方法,OnCreate总是覆盖执行任何可能需要启动初始化的活动
例如:
l 创建试图
l 初始化变量
l 绑定静态数据列表
OnCreate拥有一个Bundle类型的参数bundle,这个参数至关重要,因为我们知道应用的生命周期不归自己管,所以就意味随时可能都会被终止,
所以我们就要能够保存这中间用户操作的数据,并在下次打开后能够恢复回去,而这里的bundle参数就是用来将上一个实例中保存的数据传递进来,
从而恢复用户上次的状态。下面的代码简单的演示了如何从bundle中获取数据:
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); string extraString; bool extraBool; if (bundle != null) { intentString = bundle.GetString("myString"); intentBool = bundle.GetBoolean("myBool"); } SetContentView(Resource.Layout.Main); }
当OnCreate结束后,紧接着执行OnStart方法。
2.Onstart
这个方法总是在oncreate 执行完之后执行,我们可以重写该方法来指定一些特定的程序。
3.Onresume
当活动准备开始与用户交互时会触发该方法,一般只会在需要执行以下的操作时才重写该事件:
l 开始动画
l 开始监听GPS更新
l 显示一些相关的提示和对话框
l 注册广播监听
作为演示,下面是初始化照相机的代码:
public void OnResume() { base.OnResume(); if (_camera==null) { // 初始化 } }
OnResume非常重要,特别是在触发OnPause后。用户又切回应用,那么就需要OnResume进行恢复。所以接着就是OnPause事件。
4.Onpause
当活动被切换到后台时将触发该方法,一般我们需要在该事件做如下的事情:
l 保存用户未提交的数据
l 关闭或清除引用的资源
l 注销广播
l 如果存在正在显示的提示或者对话框,则必须利用.Dismiss()进行清除。
作为演示,下面的代码将把照相机资源进行释放:
public void OnPause() { base.OnPause(); if (_camera != null) { _camera.Release(); _camera = null; } }
5.Onstop
当该活动长时间没有在显示给用户下就会触发,一般会由以下原因触发:
l 当一个新的活动打开,并覆盖该活动时
l 一个已存在的活动切换到前台时
l 活动被销毁时
OnStop不是每次都会被执行,如果内存低下时,系统将不会执行该事件,而是直接关闭该应用,所以大家在OnPause事件中就要保存好所以的参数等等。而不能依赖该事件
6.Ondestroy
这是在一个活动结束之前最后执行的方法,大多数活动不会重写此方法
7.Onrestart
当用户通过Home按钮将该用户切换到后台,并在之后又打开该应用则会触发该事件。一般也很少重写该方法。