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的生命周期与启动模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Haskell

Haskell

Simon Thompson / Addison-Wesley / 1999-3-16 / GBP 40.99

The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on th......一起来看看 《Haskell》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具