Activity的生命周期与启动模式

栏目: IOS · Android · 发布时间: 5年前

内容简介:Ps:第一次写文章,写得很入门,相当于一篇自己的学习笔记,主要是为了帮助自己记忆,如果可以帮到有需要的你,将感到非常荣幸!为了理解,跟着画了个图,有点丑!根据使用场景分为三组:

Ps:第一次写文章,写得很入门,相当于一篇自己的学习笔记,主要是为了帮助自己记忆,如果可以帮到有需要的你,将感到非常荣幸!

1. Activity的生命周期

为了理解,跟着画了个图,有点丑!

Activity的生命周期与启动模式

根据使用场景分为三组:

· onCreate 与 onDestroy

· onStart、onRestart 与 onStop

· onResume 与 onPause

onCreate 与 onDestroy

onCreate是Activity启动的第一步,即第一个调用的方法,在这里面,我们一般进行View的初始化操作,比如setContentView、addView以及一些控件的初始化.

为什么View的初始化要放在onCreate中?

当一个Activity启动时,可以保证onCreate只执行一次,即View的初始化操作只执行一次,而如果放在onStart 、onRestart 或 onResume中都不能保证只执行一次.

onCreate方法中还会传入一个savedInstanceStated参数,主要用于Activity在非正常情况下被销毁的时候可以保存一些临时数据,比如TextView中的Text、CheckBox的状态甚至是Fragment的实例等.

非正常情况被销毁案例:更改系统语言、系统内存不够用,屏幕方向的改变.

正常情况主观销毁:调用finish、特殊启动模式下的startActivity方法.

onDestroy这一步属于Activity生命周期的最后一步,一般代表着Activity即将被销毁,而在这一刻需要将可能造成内存泄露的资源进行释放操作,否则会导致内存泄露或者是依赖Activity所引发的一些异常情况.

onRestart 、onStart 与 onStop

onRestart是在onStop状态回到前台可见状态的时候被调用,然后再调用onStart方法 onStart是Activity每次启动的时候都一定要调用的方法.

场景:点击新闻列表(ListView)的item进行查看详情,再返回列表,会刷新获取最新的新闻列表.

操作:在onStart中进行刷新获取最新列表,如果在onRestart中操作,第一次进入页面的时候不能刷新,因为首次进入页面只调用onStart方法,而不调用onRestart方法,所以应该放在onStart中执行.

onStop是当Activity在前台不可见的时候被调用.

onResume 与 onPause

onResume是在onPause调用之后,回到可交互状态时调用的方法,Activity首次创建时也是调用该方法,还可在onResume中恢复在onPause中释放的组件,例如恢复播放进度并继续播放.

onPause是在Activity处于半透明时(不可交互但是可见)调用,比如弹出一个Dialog样式的Activity,方法中可以停止不应该在暂停过程中执行的操作,如暂停播放视频.

场景分析:

打开Activity A经历的生命周期:

  • A:onCreate --> onStart --> onResume

从A点击按钮打开B经历的生命周期:

  • A: onPause --> onStop
  • B: onCreate --> onStart --> onResume

从B再返回A经历的生命周期:

  • B:onPause --> onStop --> onDestroy
  • A:onRestart --> onStart --> onResume

点击Back返回时经历的生命周期:

  • A:onPause -->onStop --> onDestroy

2. Activity的启动模式

Standard(标准模式)是Activity的默认启动模式,创建实例的时候,不管之前是否已经有此Activity的实例,都会创建一个新的Activity实例置于栈顶

Activity的生命周期与启动模式
SingleTop

(栈顶复用模式)在启动Activity时,如果新建的Activity已经存在一个实例位于栈顶,将不用创建新的Activity实例,否则将要新建一个Activity实例

Activity的生命周期与启动模式
SingleTask

(栈内复用模式)在启动Activity时,如果已经有一个此Activity的实例存在栈中,那么直接复用该实例,并将其以上的实例统统出栈,如果不存在于栈中,则创建一个实例置于栈顶。SingleTask启动模式保证栈中只存在某Activity的一个实例.

Activity的生命周期与启动模式
SingleInstance

(单例模式)比较特殊,每个Activity实例都会存在一个独立的栈中,如果当前不存在该Activity的实例,直接创建一个实例置于独立的栈中,如果已经存在就直接复用原有的实例,其他程序调用同一个Activity都是同一个Activity实例.

Activity的生命周期与启动模式

Activity的生命周期与启动模式的学习就记录到这里,总体来说写得比较简单,希望各位大佬不要介意,如果哪里写的不对,烦请各位可以指出,谢谢!


以上所述就是小编给大家介绍的《Activity的生命周期与启动模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

jQuery

jQuery

Earle Castledine、Craig Sharkie / SitePoint / 2010-02-28 / USD 39.95

jQuery: Novice to Ninja is a compilation of best-practice jQuery solutions to meet the most challenging JavaScript problems. In this question-and-answer book on jQuery, you'll find a cookbook of ready......一起来看看 《jQuery》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具