Activity生命周期的深入思考

来源:互联网 发布:js 手动触发click事件 编辑:程序博客网 时间:2024/06/05 08:30

       作为一个android开发者的必须掌握的其中一条就是activity的生命周期,参与项目的过程中不断地基础activity,一直没有时间对生命周期进行深入的了解,在此重温activit的生命周期,发现新大陆!

Actvity的生命周期


       在上图中我们可以看到google已经将一个完整的生命周期呈现给我们,单纯的看图我们能够知道一个activity具有哪些生命周期,但是它到底是如何工作的?
下面以用户的实际操作和系统处理两方面来对其进行解析

用户操作

启动一个界面

 用户打开一个界面的时候。 onCreate--onStart--onResume

home键操作离开

当用户按下home键的时候,这是界面进入不可见状态onPause--onStop

返回界面,复现

复现界面,界面从后台进入或者从另一个界面返回onReStrat--onStart--onResume

返回键操作(或者执行finish方法)

这是界面进入完全销毁的时机   界面从一个可见状态完全销毁   onPause--onStop--onDestory

系统处理

我们在开发APP的过程中,肯定遇到过对activity的生命周期完全失控,甚至可能打开两个以上的activity,这些问题往往会导致APP逻辑的错误,对此,伟大的google已经帮我们考虑了这些问题,并给出了解决方案

当内存不足,activity被异常销毁

当android手机内存不做的时候,系统会根据当前运行的APP来销毁一些不可见的activity,这时,有可能你需要返回的activity被销毁了,当前用户的操作完全丢失,体验极其糟糕,在android文档中已经给出了这种情况的解决思路

复现
返回来我们来查看activity的生命周期函数,出了onCreate方法外,都是无参的函数,那么在onCreate方法里的参数到底是?在源码里对参数的解释是  * @param savedInstanceState If the activity is being re-initialized after     *     previously being shut down then this Bundle contains the data it most     *     recently supplied in {@link #onSaveInstanceState}.  <b><i>Note: Otherwise it is null.</i></b> 也就是说在savedInstanceState 里某次被意外销毁后存储数据的bundle
存储

上面已经提到可以得到某次被意外销毁后存储数据的bundle,但是数据的存储操作到底是?

 recently supplied in {@link #onSaveInstanceState}.  这句已经给我们指明了在onSaveInstanceState方法里存储数据此方法有一个参数bundle对象,我们可以实现该方法存储数据,

当存储数据后我们返回一个已经被销毁的界面的时候,可以在onCreate方法里取出数据复现(注意判断是否为空)

一个横竖屏的操作

当用户进行横竖屏切换的时候,我们期望的是状态保存:

在android中一个横竖屏的切换往往是一个新的界面打开,可以像系统内存不足异常销毁界面处理一样,

skip:
1 bundle对象只能存储基本的数据类型和实现Parcelable和Serializable的对象
2 用户操作或者程序控制销毁一个界面,界面状态记录会被完全清除
3 如何来模拟系统内存不做异常销毁界面的情况-= 设置—开发者选项—用户离开后立即清除每个活动(Don`t keep activities)

0 0
原创粉丝点击