您现在的位置是:首页 > 文章详情

《Android 开发入门与实战(第二版)》——6.7节如何保存和恢复Activity状态

日期:2017-05-01点击:250

本节书摘来自异步社区《Android 开发入门与实战(第二版)》一书中的第6章,第6.7节如何保存和恢复Activity状态,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.7 如何保存和恢复Activity状态
Android 开发入门与实战(第二版)
之前我们提到了Activity的生命周期,也稍微了解了onPause和onStop方法,在调用了这两个方法后,Activity暂停或者停止(界面可能直接被覆盖了),但是这个Activity的实例仍然存在于内存中,并且它的信息和状态数据都不会销毁,当Activity重新回到前台后,所有的这些信息和状态又会回到和以前一样。

但是,如果系统在内存不足的情况下调用了onPause或onStop方法,Activity可能会被系统销毁,这个时候,内存中是不会存在Activity实例的,如果该Activity再次回到前台,之前的信息和状态可能无法保存,页面也就无法根据这些信息和状态回到原来的样子。为了避免这种情况,Activity中提供了onSaveInstanceState方法,这个方法接收一个Bundle类型参数,我们可以将状态和数据保存到Bundle对象中,这样的话,就算Activity被系统销毁,只要用户重新启动Activity调用onCreate方法,我们就能在onCreate方法中得到Bundle对象,并根据这个对象中的数据将Activity恢复到之前的样子。

具体可以看以下代码。

@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); savedInstanceState.get("preState"); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); outState.putString("preState", "eoe"); } 第X问1 代码解释

我们在onSaveInstanceState方法中将eoe这个值以键为preState存入了outState这个Bundle对象,之后我们就能在onCreate方法中,通过savedInstanceState这个Bundle对象取得eoe这个值了。

注意

onSaveInstanceState方法并不一定会被调用,因为有些场景是不需要保存状态数据的,比如,当用户单击“后退”按钮的时候,因为用户已经明确要关闭当前Activity了。
其实,即使不覆写onSaveInstanceState方法,该方法依然会默认保存Activity的某些状态数据,比如Activity里各个UI控件的状态。Android里几乎所有的UI控件都适当地实现了onSaveInstanceState方法,所以,当Activity被摧毁并重新恢复时,这些控件会自动保存和恢复状态。比如EditText控件会自动保存和恢复输入的数据,checkbox也会保存它是否已经选中的状态,当然,要做到这点你也需要给这些控件指定ID,不然这个控件是不会自动进行数据和状态的保存与恢复的。

由于onSaveInstanceState方法不一定会被调用,所以,我们不适合在这个方法中保存持久化数据,例如向数据库中插入记录等,类似这种操作,应该放到onPause方法中进行(前面提过)。onSaveInstanceState方法其实只适合保存瞬时状态数据,比如某些成员变量等。

小知识

除了系统因为内存不足,会摧毁你处于暂停或停止状态的Activity之外,系统设置的改变也会导致Activity的摧毁和重建。这个我们在本章上面节点“配置改变”中提到过,所以,如果你想要测试你的程序恢复状态的能力,简单的旋转装置,让屏幕横竖屏切换是非常好的方式。

原文链接:https://yq.aliyun.com/articles/100572
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章