1.activity共有4个状态

如下图所示:

运行状态

如果一个活动位于屏幕的前台(可见的),那么它就是活动的或正在运行的。

暂停状态

如果一个活动失去了焦点,但仍然可见(也就是说,一个新的非全尺寸或透明的活动将焦点放在了活动的顶部),那么它将被暂停。暂停的活动是完全活动的(它维护所有状态和成员信息,并保持与窗口管理器的连接),但是在内存极低的情况下,系统可能会终止它。

比如:当前APP出现一个非全尺寸的对话框

停止状态

如果一个活动完全被另一个活动遮挡住了,它就会被停止。它仍然保留所有的状态和成员信息,但是,它对用户来说不再可见,所以它的窗口是隐藏的,当在其他地方需要内存时,会被系统杀死。

比如:APP在后台运行

销毁状态

activity被系统杀死或者调用finish方法主动退出

可以重写的方法有:

  • onStart() : 当onCreate()之后,会调用该方法
  • onResume() : 当onStart ()之后或者取消暂停后,会调用该方法
  • onRestart() : 当取消停止后,会调用该方法
  • onPause() : 当另个非全尺寸或透明的活动将焦点放在了活动的顶部,那么该活动就会进入暂停状态,然后调用该方法
  • onStop() : 当前活动被另个活动完全覆盖后(比如有人打电话过来),那么该活动就会进入停止状态,然后调用该方法,一般在这个方法中停止所有关于刷新界面的操作.
  • onDestroy() : activity被系统杀死或者调用finish方法主动退出,那么会调用该方法, 一般在这个方法中用于释放资源,

2.activity启动模式

在Android开发中,如果我们通过一个按钮重复打开5个相同的activity的话, 系统就会创建多个实例并把它们放入任务栈中,然后我们点击返回键时,当前正在显示的activity(栈顶的实例)则会出栈,然后显示之前入栈的实例,要退出的话,必须也要点击5个相同的返回键. 这样其实非常耗资源,并且每个相同的activity都是独立的实例(数据分开的),会给用户带来困扰,为了了解决这一问题,Android为Actiivty提供了启动模式launchMode

启动模式launchMode

Activity的启动模式有四种:standard(系统默认的模式)、singleTop、singleTask和singleInstance,如下图所示:

2.1 standard标准模式

系统默认的模式,配置该模式的activity不管在任务栈中是否已存在,都会创建出来.

比如:我们通过一个按钮重复打开5个相同的activity的话,那么退出的话,必须也要点击5个相同的返回键.因为每个相同的activity都是独立的.

Manifest中配置如下:

android:launchMode=”standard”   //可以不写,因为默认就是standard模式。

2.2 singleTop栈顶单独模式

在栈顶只能拥有唯一的实例,使用该模式的话,如果当前要启动的activity是栈顶的activity,那么就不会被创建,并且不发生任何变化.

比如:我们在当前MainActivity中通过按钮重复打开第二个MainActivity,系统就会检测到当前栈顶正在运行的activity实例等于要打开的activity实例,就不会创建实例.

如果我们打开的顺序是MainActivity->SecondActivity->MainActivity(栈顶,当前正在显示的界面),则这3个实例会正常的创建出来.

Manifest中配置如下:

android:launchMode=" singleTop" 

用于该模式的常见activity比如有: 二维码扫码界面activity(避免打开多个相同界面)

2.3 singleTask单独实例模式

在栈中只能拥有唯一实例,创建使用该模式的activity的实例之前,会自动在任务栈中匹配实例,如果之前未创建,那么就在栈顶创建一个实例,如果已存在,那么会将它上面的其它所有activity全部出栈, 然后显示当前已经创建的activity,并且会回调该实例的onNewIntent()方法。

比如:

我们设置MainActivity为singleTask模式

SecondActivity为standard默认模式

然后打开的顺序是MainActivity->SecondActivity->SecondActivity->SecondActivity(栈顶,当前正在显示的界面)。

接下来我们再次打开MainActivity,由于MainActivity为singleTask,那么系统就会将它上面的其它所有activity全部出栈,所以就变成了: MainActivity(栈顶,当前正在显示的界面),这时点击返回键的话,那么就直接退出到桌面了.

Manifest中配置如下:

android:launchMode="singleTask"

用于该模式的常见activity比如有:主界面activity

2.4 singleInstance单例模式

该模式比较特殊,创建使用该模式的activity的实例会自动占用一个独立任务栈, 具有全局唯一性,如果我们要创建的activity已存在,那么就会显示当前已经创建的activity.

比如:

我们设置MainActivity为standard默认模式、SecondActivity为singleInstance模式

然后打开的顺序是MainActivity->SecondActivity (栈顶,当前正在显示的界面)。

接下来我们再次打开MainActivity,由于MainActivity和SecondActivity是分开的任务栈,所以这次激活的是MainActivity所在的任务栈,那么SecondActivity独立任务栈就会被压在最下面,所以就变成了:

SecondActivity-> MainActivity (最开始的界面)-> MainActivity (栈顶,当前正在显示的界面).

Manifest中配置如下:

android:launchMode="singleInstance"

用于该模式的常见activity比如有:浏览器界面activity(任何界面都可以去调用它访问网页)

16.Android-activity生命周期与启动模式的更多相关文章

  1. Android Activity生命周期及启动模式

    曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...

  2. Android Activity生命周期与启动模式

    Activity的完整生命周期如下图: Activity的加载模式有四种: standard: 标准模式,默认的加载模式,每次通过这种模式启动目标Acitivity,都创建一个新的实例,并将该Acti ...

  3. Activity生命周期以及启动模式对生命周期的影响

    前天用户体验反馈的一个需求,要求每次进入应用都定位到首页;这个操作很明显不适合放在首页Activity(启动模式为SingleTask)的onResume中,如果对Activity的启动模式和生命周期 ...

  4. Android查缺补漏--Activity生命周期和启动模式

    一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...

  5. Android03-Activity生命周期及启动模式

    1.返回栈概念 2.生命周期 1. onCreate() 这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动 第一次被创建的时候调用.你应该在这个方法中完成活动的初始化操作,比如 ...

  6. Activity生命周期以及启动模式对生命周期的影响(二)

    前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录. 现 ...

  7. 关于activity生命周期,启动模式和tag

    Acticity启动模式 1.standard:Activity的默认加载方法,该方法会通过跳转到一个新的activity,同时将该实例压入到栈中(不管该activity是否已经存在在Task栈中,都 ...

  8. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  9. Android开发艺术探索(一)——Activity的生命周期和启动模式

    Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被 ...

  10. 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式

    第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...

随机推荐

  1. IDEA Activiti 画图中文乱码

    画流程图时,如果节点的name填写的是中文,再次打开流程图时中文会显示乱码,如下图: 修改idea64.exe.vmoptions文件,在文件中加上如下代码: -Dfile.encoding=utf- ...

  2. [LeetCode题解]79. 单词搜索

    题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...

  3. redis基础数据结构及编码方式

    redis基础数据结构和编码方式 一.基础数据结构 1)简单动态字符串 2)双端链表 3)字典 4)跳跃表 5)整数集合 6)压缩列表 二.对象类型与编码 在redis的数据库中创建一个新的键值对时, ...

  4. 8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇

    本文作为图解java并发编程的第二篇,前一篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 图形说明 在开始想写这篇文章之前,我去网上搜索了很多关于线程状态转换的图,我惊讶的发现 ...

  5. 营销经验总结:如何才能提升h5游戏代入感?

    HTML5游戏拥有即点即玩,无需下载,并具备传播性广的特点,这就使得商家看到了无限商机,如何让产品更加深入人心,是游戏推广最为重要的环节.优秀的代入感才是游戏产品宣传的关键,那么有哪些要素的支撑才能确 ...

  6. Shader 001 - 函数造型能力

    0x00 从函数出发 Shader 中的很多效果都是由函数计算得出的,如何更好地理解二者的关系呢.不妨先看看函数是什么?函数的定义可以简单地描述为:给定一个集合 A,对于其中的元素施加法则 f,则可以 ...

  7. Django设置前端背景图片

    设置 setting.py 文件 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static&qu ...

  8. [Java核心技术]第九章-集合(Java集合框架、具体的集合、映射)

    9.1Java集合框架 一些有的没的 可以使用接口类型存放集合的引用.一旦改变了想法,只需要在调用构造函数的地方做一处修改. add方法用于向集合添加元素,如果添加元素确实改变了集合就返回true. ...

  9. JavaScript闭包函数的理解

    闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...

  10. Burger King使用RayOnSpark进行基于实时情景特征的快餐食品推荐

    作者:Luyang Wang, Kai Huang, Jiao Wang, Shengsheng Huang, Jason Dai 基于深度学习的推荐模型已广泛应用于各种电商平台中,为用户提供推荐.目 ...