Activity的onCreate方法一直是我们编写一个activity最先重载的方法。细心的小伙伴在编写代码的时候回看到这样一幕:

咦,这里怎么会有两个onCreate提供给我们重载?选择困难症患者表示根本选不出来。WTF?长久的经验告诉我们,我们要重载的是第一个onCreate方法,他只有一个参数也一直只有一个参数。并且用protected进行约束。

**两个方法有什么区别?

我们知道onCreate 是Activity生命周期的第一个方法。我们通常会在onCreate中做一些View初始化,等等操作。onCreate在整个生命周期只会初始化一次外,他还有一个很重要的作用:当我们的Activity非正常销毁之后,

例如手机旋转,内存不足导致的后台自动销销毁。为了保护我们的数据可以将数据保存在savedInstanceState中,当Activity重启数据依旧不会消失。我们可以通过onCreate方法中的savedInstance参数拿到我们的数据。

做法很简单只要重载onSaveInstanceState或者onRestoreInstance就可以了:

@Overrideprotected void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);}
@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {    super.onRestoreInstanceState(savedInstanceState);}

将数据以键值对的形式传入,方法提供一个Bundle类型的outState参数暂存数据。之后再onCreate中取出,保证Activity销毁但是数据不销毁。真是简单实用的功能解决了大多数手机内存不足而用户前台数据丢失的痛点。

onCreate方法以及足够强大,但是他能否更加强大?有没有这样一种情况,手机由于过热,没电或者第三方定制Rom由于卡顿而异常关机的情况?当用户在操作前台数据的时候手机突然关机了,怎么办?下面介绍onCreate的第二个方法

@Overridepublic void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {super.onCreate(savedInstanceState, persistentState);}

没错,当你的手机异常关机,他能帮你找回之前前台的数据。他实际上是一种数据持久化的Activity。哇塞,真牛逼。那么我们应该怎么样使用呢?

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

android:persistableMode="persistAcrossReboots"

接着重载onSaveInstanceState或者onRestoreInstance:

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

他们对应着一个PersistableBundle类型的persistentState。对齐进行操作就OK了。

补充:上面说到重载onSaveInstanceState或者onRestoreInstance。这里解释一下这两个方法onSaveInstanceState调用时机是当前Activity即将被销毁而还未被销毁的时候。而当系统调用了onRestoreInstance就表示这个Activity已经被销毁了。这个可以看需求

进行调用,这里补充一下知识点。

转载于:https://www.cnblogs.com/lovelyYakir/p/7112401.html

两个onCreate方法?你真的了解onCreate()么?相关推荐

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

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

  2. android中oncreate方法,Android textView 中 onCreate 方法的改变

    我在main.xml上使用 Layout Editor创建了一个textview名称是textView1. 我想使用一个自定义的字体,所以我在onCreate方法中创建了下面的代码,但是好像不能识别t ...

  3. android中oncreate方法,Android解决在onCreate()中获取View的width、Height为0的方法

    前言 在activity中,经常需要获取view的width和height,但是在onCreate()获取view的width和height会得到0.view.getWidth()和view.getH ...

  4. Activity的onCreate方法

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

  5. android开发之onCreate( )方法详解

    android开发之onCreate( )方法详解 onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Go ...

  6. 两个onCreate()方法

    问题 前几天写一个Activity的时候,发现出来的是一个空界面,也不报错.这样心态就很崩嘛,后来一个个在onCreate方法中打印信息,发现onCreate方法根本就没有执行-.然后发给学长看了下, ...

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

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

  8. 解析Activity中的onCreate方法

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

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

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

最新文章

  1. 蓝桥学院2019算法题1.7
  2. UidGenerator
  3. MYSQL数据库设计原则
  4. SpringMVC环境简单搭建
  5. Valid signing identity not found解决办法(原有IDP私钥丢失)
  6. 操作系统03进程管理Process_Scheduling
  7. 事理图谱:一种纯学术需求、无法落地、漏洞百出的新技术或新概念?
  8. cocos2dx实现经典飞机大战
  9. F5设备中存在一个Ticketbleed漏洞,可被远程攻击者利用
  10. java白盒测试面试题_面试之JAVA基础Junit了解
  11. functools.partial()==>预先设置参数,使得之后调用的时候,减少函数的参数
  12. 微信小程序 不能跳转页面 跳转不生效
  13. 东大OJ-最大子序列问题的变形
  14. 您知道数据中心的最佳温度是多少吗?
  15. 用java实现新浪爬虫,代码完整剖析(仅针对当前SinaSignOn有效)
  16. 基于Java Web的权限管理系统的设计与实现
  17. # 书籍《银河帝国10—裸阳》读后感—20210606
  18. POS打印机设置字体大小
  19. C++一本通题库1013
  20. 软件工程毕业设计选题java_2021年计算机专业Java相关毕业设计如何选题更容易通过...

热门文章

  1. python从入门到精通pdf百度云下载-Python从入门到精通PDF高清完整版免费下载|百度云盘...
  2. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解
  3. 用requests获取网页源代码 python-手把手教你利用爬虫爬网页(Python代码)
  4. python自学步骤-学习Python最正确的步骤(0基础必备)
  5. python装饰器原理-Python装饰器原理与用法分析
  6. python爬取慕课视频-python爬虫:爬取网站视频
  7. 零基础自学python的建议-如何从零基础自学Python?
  8. python下载的库要放到哪里-python库在哪里下载?怎么安装?
  9. python3.7入门教程-python 3.7极速入门教程5循环
  10. python开发能做什么-python能做什么?是什么?