Activity的生命周期

   Activity是什么,作为android四大组件之首。是我们使用最频繁的一种组件。正常情况下,我们除了window,Dialog和Toast,我能够看到的所有Android界面都是Activity。

Activity的生命周期:
这里写图片描述

Activitiy生命周期中的主要方法:
onCreate()方法:表示activity正在被创建,这是生命周期的第一个方法。我们可以在这里做加载布局,setContentView(), 初始化Activity所需的资源等。

onRestart()方法:表示Activity正在被重新启动,一般情况下,当前Activity从不可见到可见,onStart方法就会被调用。这种情况一般是由于用户操作导致的,例如用户在当前Activity界面点击home键或者打开一个其他的activity, activity的onPause,onStop方法就会被调用。接着这个用户又回到这个Activity界面,就会回调onRestart方法。

onStart()方法:表示Activity正在被启动,这个时候activity其实已经可见了。但是没有出现在前台,还无法和用户交互。这个时候其实可以理解为Activity已经显示出来了,但是我们看不到。

onResume()方法:表示Activity已经可见了,并且出现在前台并可以开始活动。要注意这个和onStart的区别,这两个方法都表示Acitivity可见了。但是onStart的时候Activity还是在后台,onResume的时候才显示在前台。

onPause()方法:表示Activity正在停止,正常情况下,紧跟着onStop()方法就会被调用。这个时候可以做一些存储数据,停止动画的工作,但是要注意不能太延时,会影响到新的Activity的显示,onPause必须先执行完,新的Activity的onResume方法才会执行。

onStop()方法:表示Activity即将停止,可以做一些重量级的回收工作,同样不能太耗时。

onDestory()方法:表示Activity即将被销毁,这是Activity生命周期的最后一个回调方法,可以做一些回收工作和最终的资源释放。

一些业务场景下:Activity的生命周期回调流程:
1.针对一个特定Activity,第一次启动,回调如下:onCreate >> onStart >> onResume

2.当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause >> onStop. 有一种特殊情况,如果新的Activity采用透明主题,那么当前Activity不会回调onStop.

3.当用户再次回到原Activity时,回调如下:onReStart >> onStart >> onResume

4.当用户点击back键回退时,回调如下:onPause >> onStop >> onDestory

5.从整个生命周期来说,onCreate和onDestroy方法是配对的,分别标识Activity的销毁和创建。从Activity是否可见来说,onStart和onStop方法是配对的,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次;从Activity是否在前台来说,onResume和onPause方法是配对的,随着用户操作或者设备屏幕的点亮或者熄灭,这两个方法可能被调用多次。

在Activity界面设备屏幕点亮或者熄灭(自动熄灭或者点击power键),熄灭时的生命周期为onPause>>onStop.点亮的生命周期为onRestart>>onStart>>onResume

6.启动一个新的Activity的时候,当前Activity执行onPause和onStop方法,新的Activity执行onCreate,onStart,onResume方法,这5个方法的执行顺序是什么? 答:执行顺序为onPause >> onCreate >> onStart >> onResume >> onStop.
先执行当前activity的onPause方法,然后执行新的acivity的onCrate>>onStart>>onResume方法。然后在执行当前acvitity的onStop方法。

有两种方式能够得出这个结论,1.是最简单的我们做一个demo实际测试一下。2.我们通过阅读源码得出这个结论。

异常情况下的生命周期分析:
1.资源相关的配置发现改变,导致Activity被杀死后重建。
默认情况下,如果我们的activity不做特殊处理,那么当系统配置发生改变后,Activity就会被销毁并重新创建。
当系统配置发生改变后,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态。 这个方法的调用时机是onStop之前,和onPause方法没有既定的时序关系。 它即可能是在onPause之前调用,也可能是在onPause之后调用。

当Activity被重新创建的时候,系统会调用onRestoreInstanceState(),并且把销毁时的保存的Bundle对象传递给这个方法,我们可以通过这个bundle取出我们之前保存的信息。

值得注意的是:
1.这两个方法只有在Activity被异常销毁的情况下才会被调用,正常情况不会调用!
2.在activity异常销毁的时候,系统会帮助我们做了一定的恢复工作。当Activity在异常情况下需要重新创建时,系统会默认保存Activity的视图结构,并且在Activity重启的时候恢复这些数据。如果文本框的输入数据,Listview的滚动位置等。
3.如果我们有自定义view需要在异常销毁的时候保存数据,就需要重写view的onSaveInstanceState(),在这个方法中去保存数据,然后复写view的onRestoreInstanceState()方法来保存恢复数据。Acitivity在销毁和重新的时候会去回调每个view的这两个方法。

2.情况2:资源内存不足的时候,导致优先级低的Activity被杀死。
优先级低的activity的被杀死的数据保存和恢复同异常销毁的方式相同。
Activity的等级从高到低,分为如下三种:

1.前台Activity —– 真正和用户交互的Activity,优先级最高
2.可见但非前台的Activity,比如Activity中弹出一个对话框,导致Activity可见但是位于后台无法和用户直接交互。
3.后台Activity—-已经被暂停的Activity, 比如执行了onStop。 优先级最低。

当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在的进程,并且通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。

ConfigChanges配置:
我们通过设置ConfigChanges配置,可以设置不同情况下不让activity进行重新创建。
例如:
android:configChanges=”orientation” 表示屏幕发生旋转的时候Activity不重新创建。

ConfigChanges官方参数列表:
https://developer.android.com/guide/topics/manifest/activity-element.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值