Activity的正常和异常生命周期分析

本文详细介绍了Android中Activity的生命周期,包括正常情况下的启动、运行、暂停、停止和销毁过程,以及在资源配置变化或系统内存不足等异常情况下的行为。同时讨论了如何通过onSaveInstanceState和onRestoreInstanceState来保存和恢复Activity的状态。

Activity作为四大组件之一,是使用最为频繁的一种组件。中文翻译为”活动”,但我认为翻译为界面更好。在正常情况下,除了Window、Dialog和Toast,我们可以见到的界面的确只有Activity。在这里,我将Activity的生命周期分为两种,一种是典型情况下的生命周期,另一种是非典型情况下的生命周期。典型情况下的生命周期,是指在有用户参与的情况下,Activity所经过的生命周期的改变。而异常情况下的生命周期是指Activity被系统回收或者当前设备的Configuration从而导致Activity被销毁或者重建。一个Activity从创建到销毁要经历多钟状态,比如刚开始的创建,界面可见但没有获取焦点,可见获取焦点,界面失去焦点但仍然可见,不可见,以及最终的销毁。而在每一种状态切换的过程中,系统会调用相应的方法。

正常情况下的生命周期:
1.onCreate:表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中,做一些初始化的工作,比如调用setContentView去加载界面布局资源,初始化数据等。
2.onStart:表示Activity正在被启动,这时候Activity已经可见了,但是还没有出现在前台,这时还无法和用户进行交互。
3.onResume:表示Activity已经可见了,并且出现在前台并可以和用户进行交互了。
4.onPause:表示Activity正在停止,此时的Activity仍然可见,但不会出现在前台,无法与用户进行交互了。正常情况下,紧接着onStop会被调用。但如果新的Activity采用了透明主题,那么当前Activity不会调用onStop。在这个方法中可以做一些存储数据、停止动画等工作。但是在这个方法中所做的操作不能够太耗时,因为这会影响到新的Activity的显示,旧的Activity的onPause方法必须先执行完,新的Activity的onResume方法才会执行。
5.onStop:表示Activity停止工作,可以做一些重量级的操作。这是Activity不可见更加不会再前台。
6.onDestroy:表示Activity即将被销毁,这是Activity生命周期的最后一个方法回调。在这些,我们通常做的是一些回收工作和最重的资源释放。
7.onRestart:表示Activity正在重新启动。一般情况下指的是,当当前Activity从不可见状态变为可见状态时,
onRestart方法就会被调用。比如用户按Home键或者用户打开一个新的Activity,接着用户又回到了这个Activity。
Activity生命周期

异常情况下的生命周期:
异常情况下Activity生命周期的改变主要是由资源相关的系统配置发生改变以及系统内存不足时,导致Activity生命周期的改变。但当系统是由于异常情况导致Activity被终止时,系统会调用onSaveInstanceState方法来保存当前Activity的状态,这个方法调用发生在onStop方法之前,正常情况下系统调用这个方法。当Activity被重新创建后,系统会调用onRestoreInstanceState方法来恢复异常销毁时Activity的状态。

资源相关的系统配置发生改变:当应用程序启动时,系统会根据当前设备的情况去加载合适的Resource资源,比如说手机横竖屏的切换,在默认的情况下,当手机的横竖屏进行切换时,Activity首先会被杀死,然后再进行重新创建。
系统内存不足:
Activity按照优先级从高到低可以分为以下三种:
前台Activity——正在和用户交互的Activity,优先级最高。
可见但非前台Activity——比如Activity中弹出了一个对话框,导致Activity可见但位于后台无法和用户进行交互。
后台Activity——已经被暂停的Activity,优先级最低。
当系统内存不足时,系统就会按照上述优先级去杀死Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来回复数据。如果一个进程中没有四大组件在执行,那么这个进程很快会被系统杀死,因此,一些后台工作不适合脱离四大组件而独自运行在后台中,比较好的方法是将后台工作放在Service中从而保证进程拥有一定的优先级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值