activity的声明机制及返回保存信息

android中,每个界面对应一个Activity类的实例。android系统需要出渲染一个界面,其实背后,就经历了将这个界面对应的Activity类的实例进行实例,然后调用这个实例的Oncreate()onStart()onResume()方法进行对这个界面的渲染工作。其中,我们经常需要在onCreate()方法中实现对这个界面使用到的资源进行必要初始化工作,比如界面相关的xml文件的指定等。

而如果,我们需要关闭一个界面,我们除了可以在这个自定义的Activity的代码逻辑中,通过调用finish()方法来显示引导android系统调用这个实例的onPause()、onStop()方法来关闭这个界面。但是,在更多的时候,关闭界面不是我们人为地通过调用finish()方法来实现的,而是出现在我们调用新的界面或者系统强制切换界面,比如说来电话,的时候。需要注意的是,关闭界面并不意味着调用这个Activity实例的onDestory()方法来释放这个实例,而只是调用了这个Activity实例的onStop()方法,使其对应的界面被切换掉而已。

所以,这也意味着,即使某个界面被关闭,但是这个界面对应的Activity实例未必被释放掉。那么这个实例中的成员变量以及这个成员变量中原来有的值,仍然存在。但是,当系统的资源不足,比如说内存不足的时候,android系统就会优先考虑将这些界面被切换掉的Activity实例进行释放。一旦Activity实例被释放,这个实例所持有的成员变量以及其值都会被释放掉。换句话说,这个界面的状态就会消失。

为了实现界面的状态得到保留。android有一套保存状态的机制。在Activity实例被释放之前,严格来说在调用onStop()方法之前,会调用onSaveInstanceState()方法来保存状态。我们可以在自定义的Activity中实现这个方法,并且在这个方法中,将有关需要保留的状态的值保存到这个方法的参数outstate中。那么,当这个Activity类再次被实例化之后,我们就可以在这个自定义的ActivityonCreate()或者onRestoreInstanceState()方法里面的savedInstanceState参数取回之前需要保留的值。

当然,有两点需要另外说明的。

第一、其实即使我们不重新实现onSaveInstanceState()onRestoreInstanceState()等方法,android系统也会调用Activity原始类的默认实现来完成一些必要状态的保存。所以,我们在实现这些方法的时候,在方法体中,必须要首先调用父类中的这些方法来实现必要状态的保存。

第二、onSaveInstanceState()Activity实例被关闭之前未必会被调用的,比如说,用户通过按“back”键来显示关闭当前Activity的时候就不会调用了。对于onSaveInstanceState()什么场合会被调用,我的理解是,当这个Activity是被另外一个Activity切换掉的时候会调用onSaveInstanceState()方法,无论这个切换是主动还是被被动的。

总结:

虽然,Activity的生命机制中存在保留状态的机制,但是正与上面的论述,这个机制是未必奇效的。所以,在很多android应用的实现中,会采取将状态保存到数据库中的办法。在后面以后的博文中,我将会结合实际的例子,说明这个方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值