两个onCreate()方法

来源:互联网 发布:网络改造方案 编辑:程序博客网 时间:2024/06/06 06:37

问题

前几天写一个Activity的时候,发现出来的是一个空界面,也不报错。这样心态就很崩嘛,后来一个个在onCreate方法中打印信息,发现onCreate方法根本就没有执行….然后发给学长看了下,原来是选错了onCreate()方法进行重载。
这里写图片描述
一般我们都是选择第一个,那天我选了第二个,所以问题就出现了。
那么,第二个到底是用来干嘛的呢?为了清楚自己犯了什么错误,在网上了解了一下。

问题解决

Activity的onCreate()是编写一个activity最先重载的方法。
它是Activity整个生命周期中的第一个方法。我们的界面初始化,数据初始化等等,都会在这里面实现。

第一个参数 savedInstanceState

从字面上看saveInsanceState,是保存实例状态的。实际上,saveInsanceState也就是保存Activity的状态的。saveInsanceState中的状态数据是通过onsaveInsanceState方法中保存Activity的状态而来的。当一个Activity在生命周期结束前,会调用该方法保存状态。

第二个参数 persistentState

第一个参数当Activity在手机旋转,内存不足导致的后台自动销销毁时,再次启动可以通过onCreate方法中的savedInstance参数拿到我们的数据。
那当我们的手机异常关机的时候,例如手机过热自动关机,没电自动关机或者卡顿后强制重启,是否依然可以找回前台数据呢?
这就是我们第二个参数的作用,他实际上是一种数据持久化的Activity。

第二个参数的使用

首先,我们需要在Android 的清单文件的Activity中指定如下属性:

android:persistableMode="persistAcrossReboots"

接着重载onSaveInstanceState或者onRestoreInstance:

 @Override    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {        super.onSaveInstanceState(outState, outPersistentState);    }@Overridepublic void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {    super.onRestoreInstanceState(savedInstanceState, persistentState);}

onSaveInstanceState调用时机是当前Activity即将被销毁而还未被销毁的时候。而当系统调用了onRestoreInstance就表示这个Activity已经被销毁了。

原创粉丝点击