问题

前几天写一个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:

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

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

两个onCreate()方法相关推荐

  1. 两个onCreate方法?你真的了解onCreate()么?

    Activity的onCreate方法一直是我们编写一个activity最先重载的方法.细心的小伙伴在编写代码的时候回看到这样一幕: 咦,这里怎么会有两个onCreate提供给我们重载?选择困难症患者 ...

  2. Android 在onCreate()方法中获取控件宽高值为0解决方案

    大家很多时候需要在Activity或者Fragment的onCreate()方法中获取声明的空间的高度或者宽度,进行位置移动或者其他操作,但是当调用 view.getHeight() 或者 view. ...

  3. android中oncreate方法,android开发之onCreate( )方法详解

    这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...

  4. 解析Activity中的onCreate方法

    我们在写一个自己的Activity的时候需要注意: 1.都必须extends Activity(或者其子类): 2.必须在方法onCreate中存在一条这样的语句:super.onCreate(也就是 ...

  5. (最新react-native-0.59.5) 如何将ReactNative项目集成到现有得Android项目中(两种实现方法之一)

    背景:最近在学习React-Native相关的知识,有个需求,如果已经存在一个成熟的Android 或者 IOS项目,如何实现在后续的开发中用RN来实现部分功能.再此我只是讲解一下Android de ...

  6. android 毫秒 计时器,Android时分秒计时器的两种实现方法

    可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...

  7. android oncreate调用,Android app启动activity并调用onCreate()方法时都默默地干了什么?...

    在AndroidManifest.xml文件中的元素中有这么两句: 当写好的应用发布到手机上之后,当双击"APP"应用的图标时,系统会将这个点击时间包装成一个Intent,该Int ...

  8. Activity的onCreate方法

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setC ...

  9. android studio oncreate,android studio怎样实现 oncreate方法

    匿名用户 1级 2016-03-31 回答 千峰扣丁学堂Android开发为您回答: 在AndroidManifest.xml文件中的元素中有这么两句: < /intent-filter> ...

最新文章

  1. Leetcode 219. 存在重复元素 II 解题思路及C++实现
  2. 监控路由器虚拟服务器,远程监控路由器虚拟服务器设置
  3. 进程间通信-Queue 消息队列 先进先出
  4. Xshell报错“The remote SSH server rejected X11 forwarding request.”
  5. JAVA如何比较两个数组是否相等?
  6. Linux命令总结(之二)Find
  7. Android第三十八天
  8. CSDN上传自己的资源赚积分教程
  9. Java如何进行Base64的编码(Encode)与解码(Decode)
  10. 为何不能直接拷贝软件安装好的目录运行
  11. Python的猜平均数一半游戏
  12. 测试第48届格莱美完全获奖名单『二』
  13. C语言银行账户管理系统
  14. 百度2014校园招聘-研发工程师笔试题(济南站)
  15. 步步惊心,Zookeeper集群运维“避坑”指南
  16. 阿里巴巴JAVA代码规范二【Major】
  17. 铝巨人铝模软件_助力建筑工业化发展PKPM-LMB铝模设计软件正式发布
  18. Linux下vi使用手册
  19. fuz--2128(最长子串)
  20. 二叉树的非递归遍历详解

热门文章

  1. 常用的cmd命令与Linux命令
  2. ionic3 版本更新
  3. qsort的基本用法
  4. 西瓜书学习(task2)
  5. Ant Design中的表格中key的处理
  6. 通过API访问阿里云效Codeup代码库,检查某个文件是否存在更新并下载的方法,顺带介绍一下阿里云OpenAPI
  7. [Python]networkx入门
  8. Go 语言中 = 和 := 有什么区别
  9. uni-app笔记---HbuilderX快捷键
  10. cmd窗口执行cnpm报错记录:FullyQualifiedErrorId : UnauthorizedAccess或者因为在此系统上禁止运行脚本。有关详细信息,请参阅https。。