Activity的销毁和恢复

       在开发App时,你首先需要了解的就是Activity,你知道Activity是Android系统中的四大金刚之一,可见他的重要性。那么什么是一个Activiy呢?

      概要说明

  1.       Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。
  2.       Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件
  3.       在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

        生命周期

             

           这是一个Activity的完整生命周期:

           onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。称之为entire lifetime 

       Activity的活动状态

  1. 当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态
  2. 当Activity失去了焦点但仍然对用于可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态
  3. 当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态
  4. 当Activity由于人为或系统原因(如低内存等)被销毁,此时处于销毁状态;

暂停状态:onPause(),这个时候Activity还是见的。当在这个时候Activity恢复到运行状态时,会重新调用onResume()。

停止状态:当Activity处理停止状态时,会调用onStop(),这个时候如果要恢复到运行状态就会调用一个新的方法onRestart(),然后去调用onStart(),onResume()。

销毁状态:当Activity被销毁时,就会调用onDestroy(),那么如果要恢复Activity的显示就需要重新创建这个Activity;重新去走onCreate(),onStart(),onResume()这三个方法。

       Activity状态的保存与恢复

            首先,为了让大家对Activity的状态的保存与恢复有个清楚的认识,我先举个生活中常见的例子来说明一下,比如你去食堂吃饭,饭吃到一半的时候你突然优势出去了一下,然后过了一会你又回来了,可是却发现自己的饭不见了,原来是被食堂阿姨给收走了,这个时候你可能就要抱怨了,为什么我还没吃完就给收了,这就好比你在一个应用的一个界面执行某项操作,突然来了一个电话,当你再次回到之前那个操作界面,你发现你还要重新操作,你可能又要抱怨了,所以Activity状态的保存与恢复至关重要! 

你需要思考以下五点

          第一: 有哪些状态是需要保存的? 
          第二: 什么情况下需要Activity状态的保存与恢复? 
          第三: 状态为什么会丢失? 
         第四: 如何保存与恢复? 
         第五: 这个知识点你需要注意的地方?

第一: 有哪些状态是需要保存的?

有哪些状态是需要保存的呢?最简单明了的就是对一些数据的保存,比如你正在操作一些数据,当面临突发情况,你的数据还没有操作完,这时候你就需要将数据进行保存,以便我们再次回到这个页面的时候不用重头再来。

第二: 什么情况下需要Activity状态的保存与恢复?

那么在什么情况下需要对Activity的状态进行保存与恢复呢?官方文档的说法是在处理运行时配置变更的时候,来看官方文档介绍的一段话

有些设备配置可能会在运行时发生变化(例如屏幕方向、键盘可用性及语言)。 发生这种变化时,Android 会重启正在运行的 Activity(先后调用 onDestroy() 和 onCreate())。重启行为旨在通过利用与新设备配置匹配的备用资源自动重新加载您的应用,来帮助它适应新配置。
要妥善处理重启行为,Activity 必须通过常规的Activity 生命周期恢复其以前的状态,在 Activity 生命周期中,Android 会在销毁 Activity 之前调用 onSaveInstanceState(),以便您保存有关应用状态的数据。 然后,您可以在 onCreate() 或 onRestoreInstanceState() 期间恢复 Activity 状态。

这里面提到了各种回调方法,其中也有本文介绍的重点,不急,我们一步步来,首先我总结有如下几种情况是需要对数据进行保存的
1. 点击了返回键
2. 锁屏
3. 点击home键
4. 有其他APP进入前台(比如接听电话)
5. 启动了新的Activity
6. 屏幕方向发生旋转
7. APP被杀死

让onSaveInstanceState和onRestoreInstanceState来帮忙

onSaveInstanceState:这个方法默认情况下会自动保存有关Activity的视图层次结构的状态信息,简单举个例子,我们以系统控件EditText来说,系统默认会保存有关这个控件的一个信息,也就是当你在这个控件中输入内容的时候,即使旋转屏幕内容也不会丢失,因为系统已经默认为其实现了我们说的那两个方法,但是有个前提,这个控件必须设置id,否则数据依旧会丢失,另外如果你重写了onRestoreInstanceState也要保证必须有这行代码

onRestoreInstanceState:这个就是对之前调用onSaveInstance所保存的Bundle类进行读取。

猜你喜欢

转载自blog.csdn.net/krcm110/article/details/82926734