Activity生命周期与Activity调用栈分析(一)

Activity是整个Android App直接与用户交互的核心组件,了解Activity的生命周期是了解Android系统的基础


Activity的起源:Activity是与用户交互的第一接口,它提供了一个用户用户完成指定的窗口。当开发者创建Activity之后,通过调用setContentView(View)方法来个Activity指定一个显示的界面,并以此为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activity。


Activity的状态:Activity一个最大的特点就是拥有多种状态,它可以在多种状态见进行切换,以此来控制自己的生命周期。

☆ Running

这个时候,Activity处于Activity栈的最顶层,可见,而且与用户进行交互。

☆ Paused

这个时候,Activity失去焦点,被另外一个非全屏或者一个透明的Activity放置在栈顶,Activity就转化为Paused状态,它只是失去了与用户交互的能力,所有的状态信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。

☆ Stopped

这个时候,Activity被另外一个Activity完全覆盖,那么Activity就会进入到Stopped状态,此时,它不在可见,但依然保持了所有信息和成员变量。

☆ Killed

这个时候,Activity被系统回收了或者从来没有创建过


Activity的生命周期:这张经典图众所周知,但是经常弄混它。


上图列举了很多的生命周期状态,但是其中只有三个是稳定的(Resumed,Paused,Stopped),而其他状态都是过渡状态,很快就会结束

1. Activity启动与销毁过程

在系统调用了onCreate()之后,马上回调用onStart(),然后继续调用onResume()以进入Resumed状态,完成启动。在Activity失去焦点之后,系统首先调用onPause(),然后继续调用onStop()最后调用onDestroy()来结束一个Activity的声明周期让它回到Killed状态。

以上这个过程就是Activity的启动与销毁过程。

onCreate():创建基本的UI元素。

onPause()与onStop:清除Activity的资源。

onDestoy():清除开启的线程。


2. Activity的暂停和恢复过程

当栈顶的Activity部分不可见后,就会导致Activity就入到Pause状态,此时就会调用onPasue()方法,当结束阻塞后,就会调用onResume()方法来恢复到Resume状态。

以上这个过程就是Activity的暂停和恢复过程

onPause():释放系统资源。

onResume():需要重新初始化在onPause()中释放的资源。


3. Activity的停止过程

栈顶的Activity部分不可见时,实际上后续会有两种可能,从部分不可见到可见,也就是恢复过程;从部分不可见到完全不可见,也就是停止过程。系统在当前Activity不可见的时候,总会调用onPause()方法。


4. Activity的重新创建过程

当你的Activity长时间处于stopped状态而且此时系统需要更多的内存或者系统内存纪委紧张时,系统就会回收你的Activity,而此时系统为了补偿你,会将 Activity状态通过onSavaInstanceState()方法保存到Bundle对象中,当然你也可以增加额外的键值对存入Bundler对象以保存这些状态。当你需要重新创建这些Activity的时候,保存的Bundle对象就会传递到onRestoreInstanceState()方法与onCreate()方法中,这也就是onCreate()方法中的参数---Bundle savedInstanceState的来源。不过要注意的是onSavaInstanceState()方法并不是每次当Activity离开前台的时候都会调用的,如果用户调用了finish()结束了Activity则不会调用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值