Android开发艺术探索(研读笔记)——01-Activity的生命周期
来源:互联网 发布:肝癌中医诊疗方案优化 编辑:程序博客网 时间:2024/05/24 03:22
Android开发艺术探索(研读笔记)
作者:Dimon
- 微博:@Dimon-喰
- GitHub:@Dimon94
- LOFTER:@Dimon、
01-Activity的生命周期
生命周期和启动模式以及IntentFilter的匹配规则分析。
Activity的生命周期分为两个部分
- 典型情况下的生命周期
- 异常情况下的生命周期
典型情况下的生命周期分析
- onCreate :表示
Activity
正在被创建。在这里可以做一些初始化的工作。 - onRestart :表示
Activity
正在重新启动。当当前Activity
从不可见重新变成可见状态。 - onStart :表示
Activity
正在被启动。已经可见,但不在前台,无法交互。 - onResume :表示
Activity
已经可见,并且出现在前台可以交互。 - onPause :表示
Activity
正在停止。在这里可以做一些储存数据,停止动画等工作,但不能太耗时,因为必须onPause
执行完成之后新的Activity
才能Resume
。 - onStop :表示
Activity
即将停止。可以进行一些稍微重量级的回收工作,不能太耗时。 - onDestroy :表示
Activity
即将被销毁。可以进行一些回收工作和最终的资源释放。
注意:
- onStart和onStop是从Activity是否可见这个角度来回调的
- onResum和onPause是从Activity是否在前台这个角度来回调的
异常情况下的生命周期分析
情况 1:资源相关的系统配置发生改变导致Activity被杀死并重新创建
比如说横屏手机和竖屏手机会拿到两张不同的图片(设定了landscape或者portrait状态下的图片)。本来手机在竖屏状态,突然旋转屏幕,由于系统配置发生了变化,在默认情况下,Activity会被销毁并且重新创建,当然我们也可以阻止系统重新创建我们的Activity。
当系统配置发生改变后,Activity会调用 onPause -> onStop -> onDestroy。
由于是异常情况终止,系统会在onStop
之前调用onSaveInstanceState
来保存当前Activity
的状态。(与onPause
没有时序关系)
当Activity
被系统重新创建后,系统会调用onRestoreInstanceState
,把之前onSaveInstanceState
方法所保存的Bundle
对象作为参数同时传给onRestoreInstanceState
和onCreate
方法。(从时序来说,onRestoreInstanceState
的调用时机在onStart
之后)
而在视图方面,当Activity在异常情况下需要重新创建时,系统会默认为我们保存当前Activity的视图结构,并且在Activity重启后为我们恢复这些数据。
其实每个View都有onSaveInstanceState
和onRestoreInstanceState
,关于保存和恢复View层级结构,系统的工作流程如下:
onSaveInstanceState方法,系统只会在Activity即将被销毁并且有机会重新显示的情况下才会去调用它。
情况 2:资源内存不足导致低优先级的Activity被杀死
其实这种情况的数据存储与恢复过程与情况 1完全一致。
Activity的优先级情况:
- 前台的
Activity
—— 正在和用户交互的Activity
,优先级最高 - 可见但非前台的
Activity
—— 比如Activity
中弹出了一个对话框,导致Activity
可见但是位于后台,无法和用户进行直接交互 - 后台的
Activity
—— 已经被暂停的Activity
,比如执行了onStop
,优先级最低
当系统内存不足时,系统就会按照上述优先级去杀死目标Activity
所在的进程,并在后续通过onSaveInstanceState
和onRestoreInstanceState
来存储和恢复数据。而将后台工作放入Service
中是一个比较好的方法。
当系统配置改变后,Activity如何不被重新创建
由于系统配置中有很多内容,如果当某项内容发生改变后,不想系统重新创建Activity
,可以给Activity
指定configChanges
属性。
android:configChanges="orientation|keyboardHidden"
如果我们没有在Activity
的configChanges
属性中指定该选项的话,当配置发生改变后就会导致Activity
重新创建。
最常用的只有locale
、orientation
和keyboardHidden
。
需要修改的代码很简单,只需要在AndroidMenifest.xml中加入Activity的声明即可:
<activity android:name="com.dimon.MainActivity" android:configChanges="orientation|screenSize" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter></activity>
@Overridepublic void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); Log.d(TAG,"onConfigurationChanged,newOrientation:" + newConfig.orientation);}
Activity
没有重新创建,并且没有调用onSaveInstanceState
和onRestoreInstanceState
来存储和恢复数据,而是系统调用了Activity
的onConfigurationChanged
方法,这个时候我们可以加入一些自己的特殊处理了。
最近开始看玉刚大神的《Android开发艺术探索》,根据自己的不足点,不熟悉点做些笔记。现在Android初级开发的要求变高了,我也要充实一下自己。
昨天打电话回家,还没找到工作挺惭愧的,临近毕业,实习都没有找到的确有愧于父母供我读大学。
春招已过,还得一边学习一边准备项目,找工作吧。
如果各位有Android实习的工作推荐(好吧,应该没有滴。。。)可以联系我~
我是一个肯奋斗有技术的Android程序员(又是大空话,哈哈哈,show me code!),只希望在这个社会上有自己的一片立足之地!
加油!!!
- 邮箱 :elisabethzhen@163.com
- Good Luck!
- Android开发艺术探索(研读笔记)——01-Activity的生命周期
- Android开发艺术探索(研读笔记)——02-Activity的启动模式
- Activity在异常情况下的生命周期——Android开发艺术探索笔记
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
- 《Android开发艺术探索》笔记 — Activity的生命周期和启动模式
- **读Android开发艺术探索学习笔记--Activity的生命周期**
- Android开发艺术探索笔记(1)- Activity的生命周期
- Android开发艺术探索-Activity的生命周期
- 《Android 开发艺术探索》 01-Activity的生命周期和模式
- 《Android 开发艺术探索》随手笔记——第一章Activity生命周期和启动模式
- Android开发艺术探索(研读笔记)——03-Android中的IPC机制(一)
- Android 开发艺术探索(笔记)--1. Activity 生命周期
- 《Android开发艺术探索》读书笔记——Activity的生命周期和启动模式
- Android开发艺术探索学习-Activity跳转时的生命周期
- android开发艺术探索学习 之 Activity的生命周期
- 《Android开发艺术探索》笔记之Activity的生命周期和启动模式
- 《Android开发艺术探索》之学习笔记(一)Activity的生命周期和启动模式
- Android开发艺术探索笔记(一) Activity的生命周期和启动模式(1)
- Eclipse构建Maven项目
- 02第二章 Jenkins安装与配置
- Struts2文件上传拦截器问题
- GData源码
- 产品和产品规格(产品变量)自动生成SKU的需求解决思路
- Android开发艺术探索(研读笔记)——01-Activity的生命周期
- php连接数据库和查询数据库
- Intel x86架构之多处理器与APIC
- 9、表空间和数据文件
- zzulioj 1874: 蛤玮学计网 (模拟)
- Android开发中出现的错误集(不断更新)
- linux上Java Application程序启动脚本
- codis评测
- 安卓模拟器错误