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)
- Activity生命周期的深入思考
- 深入理解Activity的生命周期
- activity的生命周期深入理解
- 深入理解Activity的生命周期
- 深入理解Activity的生命周期
- 深入理解Activity的生命周期
- 深入理解Activity的生命周期
- Activity 中 setContentView 的深入思考
- 深入理解 Android Activity的生命周期
- 深入理解 Android Activity的生命周期
- 深入理解 Android Activity的生命周期
- Android Activity完整的生命周期深入理解
- 深入理解Activity生命周期的回调
- 深入理解Activity生命周期的回调
- 对activity的生命周期深入理解
- activity生命周期深入理解
- 深入理解Activity 生命周期
- 深入学习Activity生命周期
- android随笔01——handler
- 数据挖掘-基于Kmeans算法、MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(下)
- 在device driver中给device快速添加属性文件
- k-means聚类JAVA实例
- 剑指Offer:二叉树的镜像(JAVA)
- Activity生命周期的深入思考
- 空间向量投影的一些整理
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- Web平台能从Node.js学到什么
- 网络爬虫Heritrix1.14.4在MyEclipse中的安装配置与使用教程
- 【郑轻】[1775]和尚特烦恼1——是不是素数
- 树莓派(一)安装win10 IoT
- 图像恢复及滤波处理
- Git的简单使用(一)