第一章: Activity的生命周期和启动模式:

1.典型情况下的Activity的生命周期

1.1 所谓的典型情况下的Activity的生命周期,是指用户参与的情况下.即用户正常使用app应用的时候正常执行的activity的生命周期.
1.2 在正常的情况下,Activity会经历如下的生命周期.

1>onCreate() -> 表示Activity正在被创建,这是生命周期的第一个方法.一般只会在Activity被创建的时候执行一次.
在这个方法中,我们可以做一些初始化的工作,例如setContentView()去加载布局,初始化布局所需控件,以及初始化Activity所需数据等.

2>onRestart()-> 表示Activity正在重新启动.这个方法执行的前提是Activity已经被创建过,并且在当前的Activity从不可见重新
变为可见的时候会调用onRestart()方法.这种情况一般是由按下HOME键盘,或者启动两外一个Activity之后,当前的Activity
就会执行onPause() -> onStop()方法,而后它又回到当前的Activity,则就会执行 onRestart() -> onStart() -> onResume()

3>onStart()-> 表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户进行交互.
这个是Activity已经显示出来,只是我们还看不到.所以它一般是和onResume()方法一起来显示Activity

4>onResume()-> 表示Activity已经完全可见了,并且出现在前台开始活动.它和onStart()方法的主要区别是:
onStart()方法执行的时候Activity还在后台,而onResume()方法执行的时候Activity才显示到前台.

5>onPause()-> 表示Activity正在停止,正常情况下,紧接着Activity的onStop()就会被调用.但是有一些特殊的情况.
例如弹出一个对话框的时候,这个时候就不会执行onStop()方法,因为当前的Activity()仍然是部分可见的.如果
这种情况下再回到当前的Activity就会直接调用onResume()方法.
在onPause()方法中,可以做一些存储数据,停止动画等工作,但是注意不能太耗时,因为这样会影响到新的Activity的显示.
onPause()必须先执行完之后,新的Activity的onResume()方法才会执行.

6>onStop()-> 表示Activity已经不可见了,Activity即将停止,可以做一些稍微重量级的工作,同样不能太耗时.

7>onDestroy()-> 表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,在这里我们可以做一些回收
工作和一些资源释放.
这里写图片描述

1.3 针对这张图,附加解析如下:
1> 针对一个特定的Activity,第一次启动的时候,回调如下:
onCreate() -> onStart() -> onResume().
2>当用户打开新的Activity或者切换到桌面的时候.并且当前的activity完全不可见的情况下回调如下:
onPause() -> onStop(). 有一种特殊的情况,如果新的Activity是透明的,则不会回调onStop()方法.
3>当用户再次返回到原来的Activity的时候,回调如下方法:
onRestart() -> onStart() -> onResume()
4>当用户按下back键的时候,回调如下方法:
onPause() -> onStop() -> onDestroy()
5>当Activity被系统回收后再次打开的时候,生命周期方法回调过程和<1>中的一样,生命周期方法一样,主要是参数不一样.
6>从整个生命周期来说:
onCreate() 和 onDestroy() 方法是配对的,它们之间所经历的代表一个Activity从创建到销毁一个完整的生命周期.
并且这两个方法,在一个Activity的生命周期当中只可能被调用一次.
从Activity是否可见来说:onStart()和onStop()是配对的,它们之间经历的是Activity的可见期.
从Activity是否在前台来说:onPause()和onResume()是配对的,它们之间经历的是Activity在前台的生存期.

1.4 onStart() 和 onResume, onPause()和onStop()从描述上差不多,它们之间到底有什么实质性的不同?
onStart() 和 onStop() 方法是针对Activity是否可见而设定的回调方法.
onResume和onPause() 方法是针对Activity是否在前台而设定的回调方法.
总体来说,一个Activity如果在前台,那么它必定是可见的.而有的Activity虽然可见但是并没有在前台运行.
没有获得焦点,这个时候就只能调用onPause(),而不能调用onStop()方法,因为onStop()方法一旦调用,
就标志着一个Activity就不可见了,这种情况下很有可能会影响用户体验.

1.5 假设当前的Activity A ,如果这个时候打开一个新的Activity B,那么B的onResume()方法和A的onPause()哪个先执行呢?
只有当Activity A 的onPause()方法执行完毕之后,新的Activity才会去执行 onCreate() -> onStart() -> onResume() 方法.
所以在onPause()方法中不宜执行耗时的操作,只适合做一些轻量级的任务.否则就会造成非常不好的用户体验.

2. 异常情况下Activity的生命周期

2.1 何为异常情况下的生命周期:
异常情况下的生命周期是指当前的Activity由于系统的资源不足可能被杀死,或者是当资源的系统配置文件改变造成Activity被杀死的情况

2.2 资源相关的系统配置文件发生改变导致Activity被杀死并重新创建:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值