Android四大组件之Activity生命周期分析

最近在阅读Android开发艺术探索者这本书,这本书是针对Android初级水平向高级水平进阶的目标。在此我只是做个阅读笔记,大神忽略。好了废话不多说了,我们开始搬砖吧(还是相信从菜鸟进阶到大神段位是没有捷径,唯有多撸码)。这讲我们主要是针对Activity的生命周期进行分析,查缺补漏让自己每一次都有新的收获。

Activity是什么的问题大家已经了如指掌了这里就不细说了,我们重点是分析Activity的生命周期;在接下来的套路我是以提问的形式进行分析解答。

 问题一、Activity的生命周期有哪些?有什么意义?

1、onCreate:表示Activity正在被创建,Activity生命周期的起点,可以进行一些初始化操作,比如加载布局资源,设置主题样式,切记不要执行耗时的操作,不然会出ANR问题。

2、onStart:表示Activity正在被启动,即将开始但不是处于前台,无法与用户交互。可以理解为Activity已经显示出来了,但是我们还是看不到。

3、onRestart:表示Activity正在重新启动,一般情况下是指当当前Activity从不可见重新变为可见状态,onRestart就会被调用。一般是由用户操作导致,比如用户按home键后切换到桌面或者用户打开了一个新的Activity后按返回键返回到了之前的Activity。

4、onResume:表示当前Activity是可见的,并且可以与用户进行交互。

5、onPause:表示Activity正在停止,可以存储一些轻量级数据或者停止动画,千万不能进行耗时操作,不然会出现ANR问题。

6、onStop:表示Activity即将停止,可以做一些资源回收,同样不能太耗时。

7、onDestroy:表示Activity即将被销毁,这是Activity生命周期的终点,可以做一些回收工作或者最终资源的释放,比如反注册广播,服务。

问题二、Activity在典型情况下是如何管理的?

正常情况下Activity的生命周期就只有上面7个,我们可以图文说明来了解,如图:

针对上图再附加一下具体说明,分如下几种情况:

1、针对特定的Activity,第一次启动,当前Activity执行:onCreate->onStart->onResume。

2、用户打开新的Activity或者按home键回到桌面,Activity执行:onPause->onStop,这里要注意,如果新的Activity采用了透明主题,那么当前Activity只会执行onPause,不会执行onStop。

3、当用户再次回到原来的Activity,执行:onRestart->onStart->onResume.

4、当用户按back键返回,执行:onPause->onStop->onDestroy.

总结:从整个生命周期看,大家可以这样理解容易记住,onCreate与onDestroy是配对,分别表示生命周期的开始和结束,并且在整个生命周期只执行一次。从Activity是否可见来说,onStart与onStop是配对的,从Activity是否可以与用户交互来说,onResume与onPause是配对的。

问题三、Activity在异常情况下是如何管理的?

场景一、资源相关的系统配置发生变化导致Activity被杀死并重新创建

这是很常见的情况,比如横竖屏切换的时候,Activity会被杀死然后重新创建,如果我们不做特殊处理,异常情况下生命周期如下图:

 

当系统配置发生变化后,Activity会被销毁,其中onPause,onStop,onDestroy均会被调用,同时由于Activity是在异常情况下终止,系统会调用onSaveInstanceState来保持当前Activity的状态。这个方法的回调是发生在onStop之前,可能在onPause之前也可以能在之后。Activity被重新创建后系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState保存的Bundle对象作为参数传递给onRestoreInstanceState和onCreate方法。可以这么理解,系统在异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来存储和恢复数据,其他情况不会执行这个过程。

2、资源内存不足导致低优先级的Activity被杀死

此场景数据的存储和恢复 与场景一一致,系统内存不足时候,系统会根据优先级去杀死目标Activity所在的进程。

        优先级从高到低排序:

        前台Activity-正在和用户交互的Activity优先级别最高

        可见但非前台Activity-比如Activity中弹出一个Dialog,导致Activity可见但是不能与用户交互。

后台Activity-已经被暂停的Activity,比如已经执行了onStop,优先级最低。

问题四、onStart和onResume、onPause和onStop从描述上看是差不多,对于我们来说本质的区别在哪里?

本质区别在于参考系不一样,从Activity的是否可见的角度来回调onStart,onStop;从Activity是否能与用户交互的角度来回调onResume,onPause

问题五、假设当前Activity为A,如果这时用户打开一个新的ActivityB,那么B的onResume和A的onPause哪个先执行呢?

这个问题有两种方法可以验证,第一、通过阅读Android启动Activity的源码;第二可以通过代码逻辑来验证,在当前ActivityA中打开一个新的ActivityB并且打印日志,执行结果:A onPause--> B onResume。

好了,Activity生命周期分析篇章就已经完结了,大家可以通过实践去加深自己的理解;如有错误,请大家纠正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值